【问题标题】:A specific view cannot extend the layout file in Laravel 7特定视图无法扩展 Laravel 7 中的布局文件
【发布时间】:2020-07-18 01:42:24
【问题描述】:

我正在使用 Laravel 7 开发一个慈善网站,我有一个主布局文件,它已扩展为两个视图,index 视图和 show 视图,这两个视图位于同一目录中并用于测试目的,我从index 视图复制代码并将其粘贴到show 视图中,但index 视图正确显示样式和所有内容,但是当show 视图加载时,它没有css 样式和js,下面是所有相关文件:

layout 视图:

<!DOCTYPE html>
<html lang="en">

<head>  
@include('partials.header')
@yield('styles') 
</head>
<body>
   @include('partials.nav')
   @yield('content')
   @include('partials.footer')  
<!-- loader -->
<div id="ftco-loader" class="show fullscreen"><svg class="circular" width="48px" height="48px"> 
<circle class="path-bg" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke="#eeeeee"/><circle 
class="path" cx="24" cy="24" r="22" fill="none" stroke-width="4" stroke-miterlimit="10" 
stroke="#F96D00"/></svg></div>

<script src="js/jquery.min.js"></script>
<script src="js/jquery-migrate-3.0.1.min.js"></script>
<script src="js/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.easing.1.3.js"></script>
<script src="js/jquery.waypoints.min.js"></script>
<script src="js/jquery.stellar.min.js"></script>
<script src="js/owl.carousel.min.js"></script>
<script src="js/jquery.magnific-popup.min.js"></script>
<script src="js/bootstrap-datepicker.js"></script>

<script src="js/jquery.fancybox.min.js"></script>

<script src="js/aos.js"></script>
<script src="js/jquery.animateNumber.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js? 
key=AIzaSyBVWaKrjvy3MaE7SQ74_uJiULgl1JY0H2s&sensor=false"></script>
<script src="js/google-map.js"></script>
<script src="js/main.js"></script>
@yield('scripts')

</body>
</html>  

这是正常工作的index 视图:

@extends('layout')
@section('content')
<div class="site-section fund-raisers bg-light">
<div class="container">
  <div class="row mb-3 justify-content-center">
    <div class="col-md-8 text-center">
      <h2>All Fundraisers</h2>
      <p class="lead">These are the fundraisers that require your little help to give hope to the 
 ones in need.</p>

    </div>
  </div>
</div>

<div class="container-fluid">


    <!-- <div class="row"> -->

    <div class="col-md-12 block-11">
    <div class="nonloop-block-11 owl-carousel">

   @foreach($causes as $cause)


        <div class="card fundraise-item">

          <a href="#"><img class="card-img-top" src="{{ asset($cause->image) }}" alt="Image 
  placeholder"></a>

          <div class="card-body">

            <h3 class="card-title"><a href="{{ route('causes.show', $cause->id) }}">{{ $cause->title 
  }}</a></h3>

            <p class="card-text">{{ $cause->body }}</p>

            <span class="donation-time mb-3 d-block">Last donation 1w ago</span>

            <div class="progress custom-progress-success">
              <div class="progress-bar bg-primary" role="progressbar" style="width: 80%" aria- 
  valuenow="80" aria-valuemin="0" aria-valuemax="100"></div>
            </div>

            <span class="fund-raised d-block">$12,000 raised of $30,000</span>

          </div>

        </div>

    @endforeach



    </div>

 </div>

 <br />
  <div class="d-flex justify-content-center align-items-cente"> {{ $causes->links() }} </div>

 </div>
 </div>

 @endsection  

这是show 视图,它显示了一项但无法正常工作:

@extends('layout')
@section('content')
<div class="site-section fund-raisers bg-light">
<div class="container">
  <div class="row mb-3 justify-content-center">
    <div class="col-md-8 text-center">
      <h2>All Fundraisers</h2>
      <p class="lead">These are the fundraisers that require your little help to give hope to the 
 ones in need.</p>

    </div>
  </div>
</div>

<div class="container-fluid">


    <!-- <div class="row"> -->

    <div class="col-md-12 block-11">
    <div class="nonloop-block-11 owl-carousel">



        <div class="card fundraise-item">

          <a href="#"><img class="card-img-top" src="{{ asset($cause->image) }}" alt="Image 
  placeholder"></a>

          <div class="card-body">

            <h3 class="card-title"><a href="">{{ $cause->title }}</a></h3>

            <p class="card-text">{{ $cause->body }}</p>

            <span class="donation-time mb-3 d-block">Last donation 1w ago</span>

            <div class="progress custom-progress-success">
              <div class="progress-bar bg-primary" role="progressbar" style="width: 80%" aria- 
   valuenow="80" aria-valuemin="0" aria-valuemax="100"></div>
            </div>

            <span class="fund-raised d-block">$12,000 raised of $30,000</span>

          </div>

        </div>




    </div>

    </div>


  </div>
 </div>



 @endsection  

这是controller 文件:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Cause as Cause;

class CausesController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $causes = Cause::take(15)->paginate(5);

    return view('causes.index', ['causes' => $causes]);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    //
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $cause = Cause::findOrFail($id)->first();

    return view('causes.show', ['cause' => $cause]);
}   

这是路由的web.php 文件:

<?php

use Illuminate\Support\Facades\Route;



Route::get('/', 'HomeController@index')->name('home.index');

Route::get('/causes', 'CausesController@index')->name('causes.index');
Route::get('/causes/{id}', 'CausesController@show')->name('causes.show');  

下图显示了indexshow 视图的路径:

我已经尽我所能找到了两天的解决方案,但没有任何帮助,我们将不胜感激在这方面的任何帮助。

【问题讨论】:

  • Show View的路径是什么???
  • 我认为这不是您的视图问题。好像你的代码没有到达你的 show() 函数。
  • @AkshayKhale : 我添加了路由文件,你现在可以看到了。
  • @Ts8060 : 如果代码无法到达 show() 方法,那么视图将不会被渲染,这里视图被渲染,但是 css 和 js 格式不存在。
  • @AbdulRaheemGhani 对不起。我以为 Show View 没有渲染。使用 url() 函数调用 js 和 css。 url('js/aos.js') 像这样。或者最简单但不推荐的方法是在你的 js 和 css 之前添加 / 像这样

标签: laravel layout view


【解决方案1】:

问题不在于您的视图代码或您的逻辑。一切都是正确的。唯一的问题是您加载静态资源的方式,即 CSS 和 JS 文件。

我想你一定是把你的 CSS 和 JS 文件放在了 public 文件夹中,所以当你访问索引路由时,JS URL 变成了

<script src="js/jquery.min.js"></script>

但是当你试图搜索那些 CSS 和 JS 文件时

<script src="causes/{id}/js/jquery.min.js"></script>

你可以尝试做的是:

<script src="{{ url('js/jquery.min.js') }}"></script>

这只是为了解决您的问题,理想情况下,您应该将这些文件保存在 Resource 文件夹中,并且应该使用 Laravel Mix 编译这些文件并自动加载这些文件。

参考:https://laravel.com/docs/7.x/mix

【讨论】:

  • 太好了,我可以帮助你,但正如我所建议的,尝试使用 Laravel Mix 来管理静态资产。 @AbdulRaheemGhani
  • 是的,我开始将它用于静态资产。
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 2023-03-28
  • 2014-12-07
  • 1970-01-01
  • 2011-05-23
  • 2021-02-22
相关资源
最近更新 更多