我使用刀片模板继承了问题。所以我有我的主模板:/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());
}
但我收到错误:&#34;未定义的变量:aTopNews&#34;,请帮帮我
答案 0 :(得分:1)
首先,使用模板继承,您不会返回布局视图,您将返回内容视图,Laravel的Blade引擎将负责获取和呈现正确的布局:这就是&#39; s @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());
使变量可用于所有视图:
@section('oneNews')
此外,要使部分继承有效,您需要在布局文件中使用@show
结束{{1}}。
Laravel文档非常清楚地解释了Blade Template Inheritance的工作原理。