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

时间:2016-08-11 04:07:01

标签: php zend-framework2

我想将通用变量分配给控制器操作之外的view renderer

我更愿意在module class bootstrap中处理此问题。

我的问题是,如何在view model中创建可与控制器共享的module class bootstrap

我的最终结果是能够在我们在控制器操作中创建一个新实例之前向视图模型添加变量。

这是我开始的事情,但i cannot add variables to the declared viewmodel and have it persist to the controller's new instance of a view model

有没有办法创建视图模型并在发送之前将其设置为渲染器。

这是我开始的事情,但是如果我能在模块类引导程序中获取它而不是id更喜欢。

我认为这不起作用。

    class BaseController extends AbstractActionController
    {
        protected $viewModel;

        public function onDispatch(MvcEvent $e)
        {       
            $this->viewModel = new ViewModel([
                'module' => 'modulename',
                'controller' => 'controllername',
                'action' => 'actionname'
            ]);         
            parent::onDispatch($e);
        }
    }

1 个答案:

答案 0 :(得分:0)

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组件在控制器中修改它