如何使用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')); }
这只会将$title
variables传递给视图的内容部分。 我怎样才能提供这个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') ...