使用 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')->get());
并告诉我们它打印出来的内容。
【参考方案1】:
首先,使用模板继承,您不会返回布局视图,而是返回内容视图,Laravel 的 Blade 引擎将负责获取和呈现正确的布局:这就是 @extends
在开头的目的文件。所以在你的控制器中你应该有:
return View::make('content'); // assuming content.blade.php contains the code in your example
关于模板继承的一件事是它不会将变量从子(内容)视图传递到布局视图。所以这样做View::make('content')->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 的继承模板的主要内容,如果未能解决你的问题,请参考以下文章
laravel5.1框架基础之Blade模板继承简单使用方法分析