Zend Framework,$this->_forward正在做的事情

2022-08-30 19:45:58

我希望有人向我解释_forward究竟在做什么,我无法看到_forward是否也在将附加视图呈现到操作或只是执行操作。

还有是否可以在视图脚本中将参数传递给$this>操作?

更一般地说,我的问题是如何编写确认页面,假设用户输入了一些东西,你想向他显示确认,转发是否意味着这种情况?


答案 1

_forward是内部重定向。_redirect发送一个标头,告诉客户端的浏览器转到其他 URL,_forward告诉调度程序在内部将请求重定向到其他位置。

如果您考虑正常的派单顺序:

 preDispatch()
 someAction()
 postDispatch()

在该过程的任何时候调用_forward都将导致以下步骤无法执行。因此,如果您在preDispatch()中调用_forward,则不会调用someAction(),依此类推。如果您在 someAction() 中_forward(),并且使用 viewRenderer 操作帮助程序来渲染视图(您让框架选择要渲染的视图脚本),那么 someAction() 中不会呈现任何视图脚本。

当请求转发到新的控制器/模块时,整个调度过程将在那里重复。

您可以使用以下命令找出正在调度的操作:

 $action = $this->getRequest()->getParam('action');

$action将是操作的url形式,因此如果该方法的名称为“someKindOfAction”,$action将包含“某种”。您也可以为控制器和模块执行此操作。


答案 2

我对Zend的经验有限,我希望我不是向您展示您已经看到的东西,而是根据文档(12.7.6。实用方法):

_forward($action, $controller = null, $module = null, 数组 $params = null): 执行另一个操作。如果在 preDispatch() 中调用,则将跳过当前请求的操作,转而使用新的操作。否则,在处理完当前操作后,将执行 _forward() 中请求的操作。

所以这听起来像是当它被称为重要的上下文。在后一种情况下,它将首先执行从中调用它的操作,然后执行转发的操作。例外情况是从预补丁处理程序调用它时


推荐