Zend Framework 2 - 从Controller插件中重定向而不返回

时间:2012-11-08 18:18:03

标签: php zend-framework2

是否可以从控制器插件中将用户重定向到新的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中实质上“重定向然后退出”?

2 个答案:

答案 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();