1

ルートが複雑なため、動的ルートを作成しました。routes.php は unamaneagle でした。

以下では、$controller = new $controller; を使用してコントローラーを作成します。次に $controller->$action(); 初期化されたコントローラーは、$this->layout で設定されたレイアウトを持つ BaseController を拡張します。問題は、このコントローラーを手動で作成すると、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);
  });

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'));
    }
}
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 に答える