由于我的复杂路线,我创建了一条动态路线,我的routes.php是unamaneagle。
下面我使用$ controller = new $ controller创建我的控制器;然后是$ controller-> $ action(); 初始化的控制器扩展了BaseController,其布局设置为$ this-> layout。 问题是,当我手动创建此控制器时,我无法访问BaseController上的布局对象以在我的视图中获取数据。
这一行
$this->layout->dataGroup = $data;
给了我
Attempt to assign property of non-object
routes.php文件
Route::get('/{dcontroller}/view/{id}', function($dcontroller, $id) {
$controller = ucfirst($dcontroller).'Controller';
$action = 'getView';
$controller = new $controller;
return $controller->$action($id);
});
BaseController.php
class BaseController extends Controller {
protected $layout = 'layouts.master';
protected function layoutFnc($path, $data) {
// ********************* THIS FAILS!! *********************
$this->layout->dataGroup = $data;
// *********************
$this->layout->content = View::make($path, $data);
}
}
MyController.php
class MyController extends BaseController {
public function getView($id) {
$this->layoutFnc('layouts/test', aray('test', 'test2'));
}
}
答案 0 :(得分:1)
确保在BaseController中的setupLayout()之后调用方法layoutFnc()。 (执行路由时调用setupLayout())
[编辑] 重新阅读你的帖子之后,如果你在BaseController中仍然有setupLayout()方法,我发现上面的代码不适用于你的代码。
也许您可以像这样调试setupLayout()方法:
protected function setupLayout()
{
if (false === is_null($this->layout))
{
$this->layout = View::make($this->layout);
dd(get_class($this->layout));
}
}