【问题标题】:Inheritance template using Blade使用 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()); 并告诉我们它打印出来的内容。

标签: templates laravel laravel-4 blade


【解决方案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 的工作原理。

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多