我希望有人向我解释_forward正在做什么,我无法看到_forward是否也在渲染动作的附加视图或只是执行动作.
还可以在视图脚本中将参数传递给$ this-> action吗?
更一般地,我的问题是如何编码确认页面,让我们说用户输入一些东西,你想向他显示确认,前进是否意味着该情况?
_forward是内部重定向.当_redirect发送一个标题告诉客户端的浏览器转到其他URL时,_forward告诉Dispatcher在其他地方内部重定向请求.
如果您考虑以下正常的调度顺序:
preDispatch() someAction() postDispatch()
在该进程中的任何时刻调用_forward将导致以下步骤无法执行.因此,如果在preDispatch()中调用_forward,则不会调用someAction(),依此类推.如果你在someAction()中使用_forward()并且你正在使用viewRenderer动作助手来渲染你的视图(你让框架选择要渲染的视图脚本),那么在someAction()中不会呈现任何视图脚本.
当请求被转发到新的控制器/模块时,整个调度过程将在那里重复.
您可以使用以下命令找出正在调度的操作:
$action = $this->getRequest()->getParam('action');
$ action将是动作的url形式,因此如果方法名为'someKindOfAction',$ action将包含'some-kind-of'.您也可以为控制器和模块执行此操作.
我对Zend的体验是有限的,我希望我没有向你展示你已经看过的东西,但根据文档(12.7.6.效用方法):
_forward($ action,$ controller = null,$ module = null,array $ params = null):执行另一个操作.如果在preDispatch()中调用,则将跳过当前请求的操作以支持新操作.否则,在处理当前操作之后,将执行_forward()中请求的操作.
所以这听起来像是什么时候被称为重要的背景.在后一种情况下,它将首先执行调用它的动作,然后执行转发的动作.例外情况是从preDispatch处理程序调用它
我认为重要的是要注意_forward是非常低效的,你应该总是直接调用你的方法.当你执行_forward时,init(),pre和post调度再次运行.根据init中的内容,可以运行(并插入)两次相同的数据库记录.
它易于使用但浪费.如果您对代码进行了分析,并且正在敲打为什么一切都被调用两次,那么_forward就是原因.如果你喜欢我并在init()中实例化一些对象以供整个课程使用,那么你最终会实例化两次!我确实在我的代码上加载了测试,我通过直接调用动作名称获得了更好的性能,比如foo(),而不是_forward('foo');
我想大多数人都知道的另一个非主题提示是,它尽可能使用单引号,正确的PHP解析器必须检查字符串中的嵌入变量.我不知道这会带来多少真实世界的性能,特别是如果你使用的是操作码缓存,但这是最好的做法.