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 に答える