gpt4 book ai didi

php - 更正 ZF2 重定向行为

转载 作者:可可西里 更新时间:2023-11-01 00:32:41 26 4
gpt4 key购买 nike

我已经使用 ZF2 几个月了,我对 Controller 重定向应该如何工作感到困惑。是否应该立即停止处理当前操作,并发送重定向请求?还是应该完成当前操作的处理,然后执行重定向?

很基础的问题,是吧?

回到 ZF1,我很确定重定向是立即发生的(与 forward() 不同,它会一直存储到当前操作完成)。我假设 ZF2 中的情况相同,到目前为止这是我的经验,但是今天我突然发现 Controller 正在存储重定向,并在当前操作结束时发送它。

这是一个例子:

public function testAction()
{
$this->redirect()->toUrl('/info');
echo 'Hello';
die();
}

在这种情况下,action 将回显“Hello”然后结束。

我认为这可能是事件的正常过程,我只是(纯属侥幸)在今天之前没有注意到它。不过,在我回去更改所有 Controller 之前,我只是想确定一下。 (另一种解释是,在我的配置中的某个地方,我正在破坏/覆盖重定向插件)。

最佳答案

在 Zend Framework 2.* 中,执行永远不会停止(特定的上传进度处理程序和控制台组件中的某些位置除外)。

因此,您必须停止 Controller 手动调度:

public function testAction()
{
return $this->redirect()->toUrl('/info');

echo 'Hello'; // will never be executed
}

更准确地说,截至 this callback (在触发 Zend\Mvc\MvcEvent::EVENT_DISPATCH 时使用),任何对返回 ResponseInterface 的应用程序的 dispatch 事件的监听器导致 "short-circuit"到应用程序 finish 事件。

短路(在 Zend\Mvc\Application 中)基本上会导致后续事件被跳过并强制应用程序直接触发 Zend\Mvc\MvcEvent::EVENT_FINISH 事件,因此回显响应(发生在 finish 事件的监听器中)。

在这个特定的 Controller 操作中,对 $this->redirect()->toUrl('...') 助手的调用产生一个 Zend\Http\Response ,因为我们直接返回它,所以触发了短路。

关于php - 更正 ZF2 重定向行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com