以我尝试创建布局为例。我的基本控制器看起来像这样:
class BaseController extends Controller {
protected $layout = 'layouts.default';
}
然后我通过用户控制器扩展它,就像这样:
namespace Site;
use View;
class UserController extends 'BaseController {
public function index()
{
$this->layout->content = View::make('site/user/index');
// return View::make('site/user/index');
}
}
但最后我得到以下错误Attempt to assign property of non-object
。var_dump
表示$this->layout
是字符串,而不是对象。
基本上我只想做return View::make('site/user/index');
我喜欢这样做布局。
首先-我不设置protected $layout = 'layouts.default';
在控制器-我只是离开它。
app/views/布局/master.blade.php
<h1>This is my master template</h1>
@yield('content')
<h5>This is my footer</h5>
然后在我的各种视图
app/views/user/index.blade.php
@extends('layouts.master')
@section('content')
This is the user section
@stop
这样布局模板是在视图中定义的,而不是在控制器中,这是我认为它应该在的地方(控制器不应该知道/关心你的视图使用什么模板)
假设你所有的刀片都没问题,你坚持使用控制器布局,因为Laravel允许它作为一个选项,添加这个片段到你的BaseController
来修复:
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}
如果你使用的是Laravel 5,你可以这样做(我不确定这是否是最好的方法)
return view("layout/here", [
"content" => view("dynamic/content/here")
]);
那么在你的视图中你可以这样做
<?php echo $content; ?>
当然,如果你不使用刀片。