使用Blade的继承模板

时间:2014-12-02 10:27:33

标签: templates laravel laravel-4 blade

我使用刀片模板继承了问题。所以我有我的主模板:/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;,请帮帮我

1 个答案:

答案 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的工作原理。