|
|
1
22
_转发是一个内部重定向。其中as\u redirect发送一个头,告诉客户端的浏览器转到其他URL,\u forward告诉调度程序在内部将请求重定向到其他地方。 如果考虑正常的调度顺序:
在该进程中的任何一点调用_forward将导致不执行以下步骤。因此,如果在preDispatch()中调用_forward,则不会调用someAction(),依此类推。如果在someAction()中使用_forward(),并且使用viewRenderer action helper来渲染视图(让框架选择要渲染的视图脚本),则在someAction()中不会渲染任何视图脚本。 当请求被转发到新控制器/模块时,整个调度过程将在那里重复。 您可以使用以下命令了解正在调度的操作:
$action将是操作的url形式,因此如果方法名为'someKindOfAction',$action将包含'someKindOfAction'。对于控制器和模块,您也可以这样做。 |
|
|
2
10
我对Zend的经验是有限的,我希望我没有向你展示你已经看到的东西,但是 according to the docs (12.7.6.实用方法):
所以这听起来像是什么时候叫做物质。在后一种情况下,它将首先执行调用它的操作 执行转发的操作。例外情况是从 预剥离 处理者 |
|
|
3
9
我认为需要注意的是_forward非常低效,您应该始终直接调用您的方法。执行_forward时,init()、pre和post分派将再次运行。根据init中的内容,可以运行(并插入)相同的数据库记录两次。 它很容易使用,但很浪费。如果你分析了你的代码,并且想弄明白为什么所有的东西都被调用了两次,\u forward就是原因。如果您喜欢我,并且您在init()中实例化了几个对象以在整个类中使用,那么您最终将实例化所有对象两次!我对代码进行了负载测试,并通过直接调用操作名(如foo())而不是_forward('foo'),获得了更好的性能;
|
|
|
4
3
当外部重定向不是正确选项时,将使用转发。 用例(有点僵硬,但我能做的最好):
你用不同的动作处理猫和狗的不同事情。这样做的好处是所有的参数都会一起发送。相比之下,当您使用$this时->_redirect()POST参数将丢失。在某些情况下,这是预期的行为(例如,在添加注释后,您重定向到注释列表页面,以避免重复发布和消息“页面需要再次发送数据…”。 |
|
|
5
2
我曾经发誓,框架文档的一部分在一般层面上解释了分派工作流。有 this diagram ,但要解释forward所做的事情却非常复杂。
在动作中,将设置“前进”
[问题编辑后再编辑]
|