【问题标题】:layout based controller not initialised on manual creation基于布局的控制器未在手动创建时初始化
【发布时间】:2013-08-23 05:46:20
【问题描述】:

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

【问题讨论】:

    标签: laravel laravel-4


    【解决方案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));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2018-03-27
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多