我正在使用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);
}
我正在寻找有关如何实现这一目标的一些提示,也许还有更好的方法。
提前致谢!
答案 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
);