如何在zf2中的控制器插件中设置视图变量?

时间:2012-11-01 23:59:35

标签: php zend-framework2

我编写了一个控制器插件,它将一些变量传递给我的视图。 但是我无法从我的视图中访问这些变量。

这是示例代码:

namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\View\Model\ViewModel;

class Myclass extends AbstractPlugin
{
    public function setup($event)
    {
        $view = new ViewModel();
        return $view->setVariables(array(
            'MyVariable' => 'VALUE' //this variable is not accessible from within view
        ));

    }   
}

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您通过以某种方式将它附加到事件管理器来执行插件逻辑(看起来像是$event参数),那么您可以简单地使用:

$viewModel = $event->getViewModel();并以这种方式添加您的变量。

请注意,这仅适用于MvcEvent::EVENT_DISPATCHMvcEvent::EVENT_RENDER事件类型,因为ViewModel已由控制器操作在此时创建,您只需修改它。否则,当你的动作控制器触发时,无论你在这里做什么都会被覆盖。

答案 1 :(得分:-2)

您可以在事件触发时附加MvcEvent :: EVENT_RENDER事件并访问视图模型:

use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Mvc\MvcEvent;
class Myclass extends AbstractPlugin
{
    public function __invoke()
    {
        $this->getController()->getEvent()->getApplication()->getEventManager()->attach(MvcEvent::EVENT_RENDER, array($this, 'onRender'));
    }

    public function onRender($event)
    {
        $viewModel = $event->getViewModel();
        $viewModel->setVariables(array(
            'MyVariable' => 'VALUE'
        ));
    }

}