使用 Blade 的继承模板

Posted

技术标签:

【中文标题】使用 Blade 的继承模板【英文标题】:Inheritance template using Blade 【发布时间】:2015-01-30 13:28:51 【问题描述】:

我在使用刀片模板进行继承时遇到问题。所以我有我的主模板:/layouts/main.blade.php

@section('oneNews')
<div class="row">
  <div class="large-12 columns pad_0">
      <div class="container">
          <div id="da-slider" class="da-slider">
            @foreach($aTopNews as $topNews)
              <div class="da-slide">
                  <h2> $topNews['title'] </h2>
                  <p> $topNews['content'] .</p>
                  <a href="/news/view/ $topNews['id'] " class="da-link">Read</a>
                  <div class="da-img"> html::image($topNews['image']) </div>
              </div>
              @endforeach
              <nav class="da-arrows">
                  <span class="da-arrows-prev"></span>
                  <span class="da-arrows-next"></span>
              </nav>
          </div>
      </div>
  </div>
</div>

现在,我想在另一个模板中继承这个模板

 @extends('layouts.main')

 @section('oneNews')
  <div class="row">
    <div class="large-12 columns pad_0 marg-top-20">
        Registru on-line
    </div>
  </div>
 @stop

控制器:

public function getIndex()

    return View::make('layouts.main')
        ->with('aNews',     \News::where('type', '=', '0')->get())
        ->with('aTopNews',  \News::where('type', '=', '1')->get())
        ->with('aNotice',   \News::where('type', '=', '2')->get());

但我得到错误:“未定义的变量:aTopNews”,请帮助我

【问题讨论】:

调用视图时是否定义了$aTopNews?请向我们展示您的控制器代码。 您是否检查过您渲染的模板是否正确? 我编辑了我的问题 在您的控制器中返回视图之前,请包含此行 dd(\News::where('type', '=', '1')-&gt;get()); 并告诉我们它打印出来的内容。 【参考方案1】:

首先,使用模板继承,您不会返回布局视图,而是返回内容视图,Laravel 的 Blade 引擎将负责获取和呈现正确的布局:这就是 @extends 在开头的目的文件。所以在你的控制器中你应该有:

return View::make('content'); // assuming content.blade.php contains the code in your example

关于模板继承的一件事是它不会将变量从子(内容)视图传递到布局视图。所以这样做View::make('content')-&gt;with('aTopNews', $aTopNews) 只会使aTopNews 可用于content 视图,而不是它扩展的layouts.main 视图。要使其在布局视图中可用,您可以使用 View::share() 使变量可用于所有视图:

View::share('aTopNews',  \News::where('type', '=', '1')->get());

此外,要使部分继承起作用,您需要在布局文件中以 @show 结束 @section('oneNews')

Laravel 文档很好地解释了 Blade Template Inheritance 的工作原理。

【讨论】:

以上是关于使用 Blade 的继承模板的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - blade 模板继承的使用

laravel5.1框架基础之Blade模板继承简单使用方法分析

laravel-模板引擎Blade

请教laravel view 怎么显示 controller 中传递的对象值

Laravel中的模板引擎Blade

无法在 Blade 中使用 jQuery