来自http://laravel.com/docs/4.2/templates:
(控制器)
class UserController extends BaseController {
/**
* The layout that should be used for responses.
*/
protected $layout = 'layouts.master';
/**
* Show the user profile.
*/
public function showProfile()
{
$this->layout->content = View::make('user.profile');
}
}
(模板)
@extends('layouts.master')
@section('sidebar')
<p>This is appended to the master sidebar.</p>
@stop
@section('content')
<p>This is my body content.</p>
@stop
为什么layouts.master
需要被调用两次? $this->layout
需要设置为layouts.master
以及您需要将layouts.master
传递给@extends()
这一事实似乎是多余且不必要的。
答案 0 :(得分:5)
您的showProfile()
方法已经足够了:
return View::make('user.profile');
而不是:
protected $layout = 'layouts.master';
和
$this->layout->content = View::make('user.profile');
修改强>
使用$layout
属性时的另一种方法有点复杂。
在layouts.master
模板中,您不能使用yield('content')
,但是您将{{ $content }}
作为变量,因此文件可能如下所示:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
test
{{ $content }}
test2
{{ $sidebar }}
</body>
</html>
现在你可以像以前一样拥有财产:
protected $layout = 'layouts.master';
您需要的是使用以下内容将内容设置为content
和sidebar
变量:
$this->layout->content = 'this is content';
$this->layout->sidebar = 'this is sidebar';
布局将自动显示
当然,在上述2个案例中,您可以使用使用模板,以便使用:
$this->layout->content = View::make('content');
$this->layout->sidebar = View::make('sidebar');
并且在那些文件中定义的内容没有@section
,例如:
<强> content.blade.php 强>
this is content
<强> sidebar.blade.php 强>
this is sidebar
此输出将为:
test this is content test2 this is sidebar
这种方法对我来说要复杂得多。我总是使用return View::make('user.profile');
并定义了我在开头展示的模板(使用@section
扩展其他模板以放置自己的内容)