是否可以从控制器插件中将用户重定向到新的URL,而不必将响应对象返回给控制器?
具体来说,我想将用户重定向到当前URL的安全版本。所以在ZF2中我有这个:
$url = 'https://'.$this->getURL();
$response = $this->getController()->redirect()->toUrl( $url );
return $response;
然而,在Zend Framework 1中,我能够做到:
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$url = 'https://'.$this->getURL();
$redirector->gotoUrlAndExit($url);
是否有可能在ZF2中实质上“重定向然后退出”?
答案 0 :(得分:4)
假设您正在扩展Zend \ Mvc \ Controller \ Plugin \ AbstractPlugin,那么您应该可以像这样重定向:
$this->getController()->plugin('redirect')->toUrl($url);
return FALSE;
如果你看一下Zend \ Mvc \ Controller \ Plugin \ Redirect中的toUrl方法,它看起来像这样:
/**
* Redirect to the given URL
*
* @param string $url
* @return Response
*/
public function toUrl($url)
{
$response = $this->getResponse();
$response->getHeaders()->addHeaderLine('Location', $url);
$response->setStatusCode(302);
return $response;
}
很明显,是返回响应对象,但它也已经为它添加了标题,并且从控制器中你不必显式返回响应,所以从你的插件中也不应该。我认为通常这样做是为了保持流畅的界面,但是因为你知道你不需要它,所以你不需要传回它。
注意:我没有在插件中对此进行测试,但是我在控制器中执行此操作并且工作正常:
$this->plugin('redirect')->toUrl($url);
return FALSE;
答案 1 :(得分:0)
在插件内部,只需返回操作:
return $this->getController()->getAction();