如何使用Laravel'Blade模板将variables传递给布局?

在Laravel 4中,我的控制器使用刀片布局:

class PagesController extends BaseController { protected $layout = 'layouts.master'; } 

主版面输出variables标题,然后显示一个视图:

 ... <title>{{ $title }}</title> ... @yield('content') .... 

但是,在我的控制器中,我似乎只能将variables传递给子视图,而不是布局。 例如,一个行动可能是:

 public function index() { $this->layout->content = View::make('pages/index', array('title' => 'Home page')); } 

这只会将$titlevariables传递给视图的内容部分。 我怎样才能提供这个variables到整个视图,或者至less是主布局?

如果您在内容布局中使用@extends ,则可以使用以下命令:

 @extends('master', ['title' => $title]) 

我可以通过添加到我的控制器方法来解决这个问题:

  $title = 'My Title Here'; View::share('title', $title); 

$ this-> layout-> title ='主页'; 也没有工作。

对于未来使用Laravel 5的Google,您现在可以将其与includes,

 @include('views.otherView', ['variable' => 1]) 

在刀片模板中:定义一个像这样的variables

 @extends('app',['title' => 'Your Title Goes Here']) @section('content') 

并在app.blade.php或任何其他您的select(我只是遵循默认的Laravel 5设置)

 <title>{{ $title or 'Default title Information if not set explicitly' }}</title> 

这是我的第一个答案。 希望它能奏效。祝你好运!

看起来好像我可以使用布局对象上的属性将variables传递给整个布局,例如为了解决我的问题,我可以执行以下操作:

 $this->layout->title = 'Home page'; 

你可以试试:

 public function index() { return View::make('pages/index', array('title' => 'Home page')); } 

最简单的方法来解决:

 view()->share('title', 'My Title Here'); 

或使用视图Facade:

 use View; ... View::share('title', 'My Title Here'); 
 $data['title'] = $this->layout->title = 'The Home Page'; $this->layout->content = View::make('home', $data); 

到目前为止,我已经完成了这个工作,因为我需要在视图和主文件中。 看来如果你不使用$ this-> layout-> title,它将不会在主布局中可用。 改进欢迎!

 class PagesController extends BaseController { protected $layout = 'layouts.master'; } public function index() { $this->layout->title = "Home page"; $this->layout->content = View::make('pages/index'); } 

在刀片模板文件中,请记住在variables前面使用@。

 ... <title>{{ $title or '' }}</title> ... @yield('content') ...