基于布局的控制器未在手动创建时初始化

时间:2013-08-21 01:33:01

标签: laravel laravel-4

由于我的复杂路线,我创建了一条动态路线,我的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'));
    }
}

1 个答案:

答案 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));
    }
}