Zend Framework 2 - 使用来自控制器插件的值设置布局变量

时间:2013-11-05 21:00:53

标签: php zend-framework2

我正在使用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);
}

我正在寻找有关如何实现这一目标的一些提示,也许还有更好的方法。

提前致谢!

1 个答案:

答案 0 :(得分: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
);