在我的项目中,我创建了一个 ViewHelper,以在每个页面上显示一个表单。如果用户提交表单,则发布信息总是发布到同一个控制器。控制器处理完帖子后,用户应该重定向到他提交表单的页面。
要动态重定向,我想通过隐藏元素提交控制器和操作。但我不知道如何在 ViewHelper 中设置它们。我试过了InjectApplicationEventInterface
,但是我的成员变量是空的,所以我猜它只适用于控制器而不是助手。
那么如何访问 RouteMatch 对象呢?
在我的项目中,我创建了一个 ViewHelper,以在每个页面上显示一个表单。如果用户提交表单,则发布信息总是发布到同一个控制器。控制器处理完帖子后,用户应该重定向到他提交表单的页面。
要动态重定向,我想通过隐藏元素提交控制器和操作。但我不知道如何在 ViewHelper 中设置它们。我试过了InjectApplicationEventInterface
,但是我的成员变量是空的,所以我猜它只适用于控制器而不是助手。
那么如何访问 RouteMatch 对象呢?
这Zend\View\HelperPluginManager
是保存视图助手的服务定位器,它不包含应用程序事件初始化器的实例,但它具有对主服务定位器的引用,因为它是一个插件管理器。考虑在您的助手中实现以下内容:
public function __construct(\Zend\Mvc\MvcEvent $mvcEvent)
{
// injecting the mvc event, since $mvcEvent->getRouteMatch() may be null
$this->mvcEvent = $mvcEvent;
}
然后,在您的模块getViewHelperConfig
(的实现ViewHelperProviderInterface
)中,您定义以下内容:
public function getViewHelperConfig()
{
return array(
'factories' => array(
'myHelper' => function (\Zend\ServiceManager\AbstractPluginManager $pm) {
$application = $pm->getServiceLocator()->get('Application');
return new MyViewHelper($application->getMvcEvent());
},
),
);
}