2

製品コントローラーとヘッダーコントローラーがあります。製品コントローラーをロードするときは、Route :: forward()を使用してヘッダーコントローラーをロードします。

return View::make('frontend.catalogue.product.view')
            ->with('head', Route::forward("GET", "frontend/page/head"));

次に、次のようにしてページのヘッダーをエコーアウトできます。

<?php echo $head; ?>

単純。ただし、ページタイトルやメタディスクリプションなど、製品コントローラーで定義されるヘッダーコントローラーに情報を渡したいと思います。

理想的には、配列をヘッダーに渡すか、両方のルート要求がアクセスできるインスタンス化されたクラスをどこかに置くことができます。

ベースコントローラーコンストラクターでライブラリをインスタンス化しようとしましたが、これは各Route :: forward()リクエストで再インスタンス化されるため、設定したプロパティは次の転送で読み取ることができません。

これを行うために私が考えることができる唯一の方法は、セッションデータを使用することですが、それがそれを行うための最良の方法ではないようです。

ヘッダーは、独自のモデルなどを処理するため、ビューコンポーザーだけでなくコントローラーである必要があります。

Laravelが理想的なソリューションであるHMVCを実行していないことは知っています。また、HMVCのバンドルがあることも知っていますが、Laravelの方法でこれにどのようにアプローチするのか興味があります。

(Laravel 3.2 btwを使用)

4

1 に答える 1

2

これを私が望むように機能させることができました。興味のある他の人のために:

使用する代わりに

return View::make('frontend.catalogue.product.view')
             ->with('head', Route::forward("GET", "frontend/page/head"));

メインリクエストコントローラーで次のことを行います。

    $document = array(
        'meta_title' => 'My Title',
        'meta_description' => 'My Description',
    );

    // Output the view
    return View::make('frontend.catalogue.category.view')
                    ->with('head', Controller::call('frontend.page.head@index', array($document)));

私のfrontend/page/headコントローラーには、次のものがあります。

public function action_index($document = array()) {

       $meta_title = isset($document['meta_title']) ? $document['meta_title'] : 'Default Title';

       return View::make('frontend.page.head')
                ->with('meta_title', $meta_title);

}

これを手伝ってくれたLaravel IRCのフレンドリーな人たちへの小道具

于 2013-03-23T13:08:54.240 に答える