1

由于我的路线复杂,我创建了一条动态路线,我的 routes.php 是 unamaneagle。

下面我使用 $controller = new $controller; 创建我的控制器。然后 $controller->$action(); 初始化的控制器扩展了 BaseController,它有一个使用 $this->layout 设置的布局。问题是,当我手动创建此控制器时,似乎无法访问 BaseController 上的布局对象以在我的视图中获取数据。

这条线

 $this->layout->dataGroup = $data;

给我

   Attempt to assign property of non-object

路由.php

 Route::get('/{dcontroller}/view/{id}', function($dcontroller, $id) {
    $controller = ucfirst($dcontroller).'Controller';
    $action = 'getView';
    $controller = new $controller;
    return $controller->$action($id);
  });

基本控制器.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'));
    }
}
4

1 回答 1

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));
    }
}
于 2013-08-21T06:30:12.527 回答