【问题标题】:Laravel Blade view not workingLaravel Blade 视图不起作用
【发布时间】:2017-06-18 16:03:00
【问题描述】:

我使用的是 Laravel 5.3.28 版本。我创建了主视图(main.blade.php)并尝试从不同的子视图(navbar.blade.php)中提取详细信息,这些子视图位于 view/pages 目录中,但它不起作用。

project/routes/web.php 中的路由文件

            Route::get('/', function () {
                return view('main');
            });

resources/views/main.blade.php 中的主视图(此文件将从 navbar.blade.php 接收数据)

                        <div id="column">Test1</div>
                        <div id="container">
                            @yield('content')<!--This will get the content from navbar.blade.php-->
                        </div>

resources/views/pages/navbar.blade.php 中的子视图

            @extends('main')
            @section('content')
                    <div id="row">
                       Test2
                     </div>
            @endsection

我可以看到输出为 Test1 但不是 Test2。为什么会这样?

【问题讨论】:

    标签: php laravel laravel-5.3


    【解决方案1】:

    要查看输出 Test2,您必须返回 navbar 视图

    Route::get('/', function () {
            return view('navbar');
        });
    

    @yield 是一个扩展 main view 的地方,然后你可以在这个内容中放一些东西。

    下面我用你的视图文件举例说明

    您可以简单地将其放在 navbar.blade.php 中。它不需要扩展。

     <div id="row">
         Test2
     </div>
    

    在你的 main.blade.php 你可以把这个

      <div id="column">Test1</div>
                        <div id="container">
                            @include('navbar')
                          @yield('content')  
      </div>
    

    假设您决定创建第三个视图,它将使用导航栏视图扩展主视图。假设您创建了一个名为 home.blade.php 的视图并将其添加到您的 home.blade.php 视图中

    @extends('main')
    @section('content')
     Welcome Home !!!
    @endsection
    

    然后,如果您拨打电话,请创建如下路线

    Route::get('/home', function () {
        return view('home');
    });
    

    如下图所示

    <div id="column">Test1</div>
                    <div id="container">
                          <div id="row">
                            Test2
                          </div>
                     Welcome Home !!!  
                   </div>
    

    希望这将清除您对视图渲染的概念

    【讨论】:

    • 默认情况下,我调用 main.blade.php,其中包含通用代码,而导航栏是动态内容,将添加到 main。不可能吗?
    • 查看并阅读我的更新答案。它将清除您关于扩展视图的概念
    【解决方案2】:

    你应该调用 view('navbar') 而不是 view('main') 因为 navbar 是主视图的子视图

    如果你调用父子内容,调用 view('navbar') 将看不到那里

    【讨论】:

      【解决方案3】:

      要查看导航栏内容,您应该返回 navbar 视图:

      Route::get('navbar', function () {
          return view('navbar');
      });
      

      但如果您打算在多个视图中包含导航栏,则应使用@include() 而不是使用section()extends()yield()

      @include(`navbar`)
      

      【讨论】:

      • 我为路由保留了相同的代码,删除了 yield、section 和 extends 并尝试了 @include('pages.navbar')。它有效
      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2015-04-08
      相关资源
      最近更新 更多