我正在查看Laravel文档,我看到了这个片段:
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');
}
}
我们可以清楚地看到$ this-> layout ='layouts.master'。然而,然后他们定义了布局对象的子代(据我所知,它只是一个基本的PHP字符串,并且没有一个名为content的字段,通过......
$this->layout->content = View::make('user.profile');
字符串如何定义名为content的字段?
当我继承BaseController并尝试为其赋值时 $ this-> layout->内容,为什么会出现以下错误:“尝试 分配非对象的属性“?
答案 0 :(得分:6)
为什么不看看BaseController?看起来他们改变了$this->layout
。
https://github.com/laravel/laravel/blob/master/app/controllers/BaseController.php
<?php
class BaseController extends Controller {
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}
}
我的建议是,如果你使用PHP框架,当你不明白它的工作原理时,不要害怕检查它的来源。通常会有更少的魔法&#34;比你想象的还要......
IMO,这似乎是一个糟糕的设计,将变量初始化为字符串,然后将其更改为某个对象。只是滥用宽松的打字。