3

Zend Framework 2 を使用していますが、レイアウト ファイルで使用する変数を設定しようとして問題が発生しています。

基本的に、すべてのコントローラー アクションで値を読み込むことなく、ショッピング カート内のアイテムの総数をナビゲーション バーに表示したいと考えています。

これまでに行った調査から、モジュールの onBootstrap で変数を設定する方法と、それをレイアウトに出力する方法を見つけました。

私はショッピング カートにサード パーティのモジュールを使用しています。私の問題は、設定したい値がコントローラー プラグインから来ていることです。これは、コントローラーから呼び出すとうまく機能しますが、onBootstrap からこのプラグインを呼び出す方法が見つかりませんでした。 .

私がやろうとしていることは次のとおりです。

public function onBootstrap(MvcEvent $e)
{
    $app = $e->getApplication();
    $events = $app->getEventManager();
    $shared = $events->getSharedManager();
    $sm = $app->getServiceManager();

    // Cart total items
    $total_items = $sm->get('ShoppingCart')->total_items(); // <-- Not working because it is declared as a controller plugin in the third party module
    $e->getViewModel()->setVariable('total_items', $total_items);
}

これを達成する方法についていくつかのヒントを探していましたが、もっと良い方法があるかもしれません。

前もって感謝します!

4

1 に答える 1

2

コントローラ プラグインを取得するには、次を使用します。

$plugins = $sm->get('ControllerPluginManager');
$plugin  = $plugins->get('ShoppingCart');

変数を設定するには、次を使用します。

$events = $app->getEventManager();
$events->attach(
    MvcEvent::EVENT_RENDER,
    function($e) use ($plugin) {
        $viewModel = $e->getViewModel();
        $viewModel->totalItems = $plugin->totalItems();
    },
    100
);
于 2013-11-05T21:31:17.927 に答える