我想给控制器动作之外的view renderer
分配通用变量。
我宁愿在module class bootstrap
中处理这个问题。
我的问题是,如何在module class bootstrap
中创建一个可以与控制器共享的view model
。
我的最终结果是能够在控制器动作中创建一个新的实例之前向视图模型添加变量。
这是我开始的东西,然而i cannot add variables to the declared viewmodel and have it persist to the controller's new instance of a view model
。
是否有一种方法可以创建一个视图模型,并在调度之前将其设置为渲染器
这是我开始的东西,但如果我能在模块类bootstrap中得到它,而不是我更喜欢。
我认为这行不通。
class BaseController extends AbstractActionController
{
protected $viewModel;
public function onDispatch(MvcEvent $e)
{
$this->viewModel = new ViewModel([
'module' => 'modulename',
'controller' => 'controllername',
'action' => 'actionname'
]);
parent::onDispatch($e);
}
}
在Module.php
中,您可以访问event
对象。
在这种情况下,你可以像这样设置一些变量:
$event->getViewModel()->setVariable('isAdmin', $isAdmin);
$event->getViewModel()->setVariable('var', $var);
$event->getViewModel()->setVariable('form', $form);
$event->getViewModel()->setVariable('uri', $uri[0]);
如果你想测试更多,你也可以这样做:
$widgetTemplate = new ViewModel();
$widgetTemplate = $widgetTemplate->setTemplate('widget/container');
$event->getViewModel()->addChild($widgetTemplate, 'widget');
这些变量在您的layout.phtml
中可用。我没有测试你的控制器中是否有相同的viewModel
,如果你测试了这个解决方案,请给我一个反馈。
对于在module.php
中定义的变量,您也可以使用Zend'Container'Session
组件在控制器