你正在混合Laravel的两种不同的布局方法。
这样,您正在渲染布局视图,包括主视图,并尝试再次包括布局。
我个人的偏好是控制器的方法。
控制器布局
控制器和布局可以保持不变。
注意:作为一个快捷方式,您可以嵌套内容而不是View :: make,当您在布局中回显它时自动呈现它。
在home.blade.php中删除@layout函数。
编辑(示例):
controllers / home.php
class Home_Controller extends Base_Controller {
public $layout = 'layouts.default';
public function action_index()
{
$this->layout->title = 'title';
$this->layout->nest('content', 'home', array(
'data' => $some_data
));
}
}
views / layouts / default.blade.php
{{ $title }}{{ $content }}
views / home.blade.php
部分内容包括在内容中。
@include('partials.header')
{{ $data }}
@include('partials.footer')
刀片布局
如果你想要这种方法,你有一些问题。首先,你在布局后包括新内容。不确定是否有意,但@layout函数本身基本上只是一个@include限制在视图的最开始。所以如果你的布局是一个封闭的html,任何包含之后,将附加在你的html布局之后。
你的内容应该在这里使用@section函数和@yield它在你的布局。页眉和页脚可以包含在带有@include的布局中,或者如果要在内容视图中定义它,那么也可以将它们放在@section中,如下所示。如果你这样定义它,如果一个部分不存在没有得到。
controllers / home.php
class Home_Controller extends Base_Controller {
public function action_index()
{
return View::make('home')->with('title', 'title');
}
}
views / layouts / default.blade.php
{{$title}}@yield('header')
@yield('content')
@yield('footer')
views / home.blade.php
@layout('layouts.default')
@section('header')
header here or @include it
@endsection
@section('footer')
footer
@endsection
@section('content')
content
@endsection