我编写了一个控制器插件,它将一些变量传递给我的视图。 但是我无法从我的视图中访问这些变量。
这是示例代码:
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
));
}
}
有什么建议吗?
答案 0 :(得分:0)
如果您通过以某种方式将它附加到事件管理器来执行插件逻辑(看起来像是$event
参数),那么您可以简单地使用:
$viewModel = $event->getViewModel();
并以这种方式添加您的变量。
请注意,这仅适用于MvcEvent::EVENT_DISPATCH
和MvcEvent::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'
));
}
}