在zend framework 2项目中创建共享视图模型


create shared view model in zend framework 2 project

我想给控制器动作之外的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组件在控制器

中修改它