当前位置:  开发笔记 > 编程语言 > 正文

Zend Framework,$ this - > _ forward正在做什么

如何解决《ZendFramework,$this->_forward正在做什么》经验,为你挑选了3个好方法。

我希望有人向我解释_forward正在做什么,我无法看到_forward是否也在渲染动作的附加视图或只是执行动作.

还可以在视图脚本中将参数传递给$ this-> action吗?

更一般地,我的问题是如何编码确认页面,让我们说用户输入一些东西,你想向他显示确认,前进是否意味着该情况?



1> smack0007..:

_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'.您也可以为控制器和模块执行此操作.



2> Karim..:

我对Zend的体验是有限的,我希望我没有向你展示你已经看过的东西,但根据文档(12.7.6.效用方法):

_forward($ action,$ controller = null,$ module = null,array $ params = null):执行另一个操作.如果在preDispatch()中调用,则将跳过当前请求的操作以支持新操作.否则,在处理当前操作之后,将执行_forward()中请求的操作.

所以这听起来像是什么时候被称为重要的背景.在后一种情况下,它将首先执行调用它的动作,然后执行转发的动作.例外情况是从preDispatch处理程序调用它



3> Dan..:

我认为重要的是要注意_forward是非常低效的,你应该总是直接调用你的方法.当你执行_forward时,init(),pre和post调度再次运行.根据init中的内容,可以运行(并插入)两次相同的数据库记录.

它易于使用但浪费.如果您对代码进行了分析,并且正在敲打为什么一切都被调用两次,那么_forward就是原因.如果你喜欢我并在init()中实例化一些对象以供整个课程使用,那么你最终会实例化两次!我确实在我的代码上加载了测试,我通过直接调用动作名称获得了更好的性能,比如foo(),而不是_forward('foo');

我想大多数人都知道的另一个非主题提示是,它尽可能使用单引号,正确的PHP解析器必须检查字符串中的嵌入变量.我不知道这会带来多少真实世界的性能,特别是如果你使用的是操作码缓存,但这是最好的做法.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有