3

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

这是示例代码:

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
        ));

    }   
}

有什么建议吗?

4

2 回答 2

0

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

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

请注意,这仅适用于事件类型MvcEvent::EVENT_DISPATCHMvcEvent::EVENT_RENDER因为此时控制器操作已经创建了 ViewModel,而您只是在修改它。否则,当您的动作控制器触发时,您在此处所做的任何事情都将被覆盖。

于 2012-12-30T22:33:59.703 回答
-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'
        ));
    }

}
于 2012-11-02T05:40:14.690 回答