1

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

4

2 回答 2

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;
于 2012-11-10T00:42:53.747 回答
0

在您的插件中只需返回操作:

return $this->getController()->getAction();
于 2014-01-10T19:42:05.890 回答