Zend框架,什么$这 - > _着做(Zend Framework, what $this-

2019-09-02 11:27发布

我想有人给我解释一下什么是_forward究竟在做,我看不出如果_forward也呈现附加视图的动作或刚刚执行的操作。

也可以传递参数被$ this->动作视图脚本?

更一般我的问题是如何编写一个确认页面,假设用户输入一些东西,你想向他出示确认,向前是意味着这种情况下?

Answer 1:

_forward是内部重定向。 凡为_redirect发送一个报头,告诉客户端浏览器去一些其他的URL,_forward告诉调度员在内部重定向请求其他地方。

如果你考虑的正常调度命令:

 preDispatch()
 someAction()
 postDispatch()

在该进程的任何一点调用_forward将导致无法执行以下步骤。 所以,如果你在preDispatch调用_forward(),someAction()不会被调用等等。 如果您()在someAction()_forward并且正在使用ViewRenderer会呈现你的意见(你让框架选择渲染什么看法脚本),则没有视图脚本将在someAction渲染()。

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

你可以找出什么样的行动正通过派遣:

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

$行动将成为行动的URL形式,因此,如果该方法是名为“someKindOfAction”,$行动将包含“一些实物-的”。 您可以为控制器和模块做到这一点。



Answer 2:

我与Zend的经验是有限的,我希望我没有显示你已经看到的东西,但根据文档 (12.7.6实用方法。):

_forward($动作,$控制器= NULL,$模块= null,数组$ PARAMS = NULL):执行另一个动作。 如果调用preDispatch()方法,当前请求的动作将有利于新的被跳过。 否则,将处理的当前动作之后,动作在_forward请求()将被执行。

所以,它听起来就像当它被称为问题的情况下。 在后一种情况下,它会首先执行从它被称为然后执行转发操作的操作。 唯一的例外是当它被从preDispatch处理函数中调用



Answer 3:

我认为,需要注意的是_forward是非常低效的这一点很重要,你应该总是直接打电话给你的方法。 当你做一个_forward,在init(),预并再次派遣后运行。 根据你在你的init什么,你可以运行(与插入)相同的数据库记录的两倍。

这是很容易使用,但浪费。 如果你分析代码,并敲打你的头,为什么一切都被调用两次,_forward就是这个原因。 如果你和我一样,你在init()实例几个对象用于整个类,你拉闸实例两遍! 我做了负载测试我的代码,我通过直接调用这个动作的名称,类似foo()得到了更好的性能,而不是_forward(“富”);

另外题外话提示我想大多数人都知道,它是用单引号尽可能正弦PHP解析器来检查嵌入式变量的字符串。 我不知道有多少真实世界中的性能,这将给予,特别是如果你使用的是操作码缓存,但它是一个最好的做法。



Answer 4:

前锋换货时要使用外部重定向是不正确的选项。 用例(位ankward,但最好的,我可以弥补):你可以添加你的宠物(无论是狗或猫)的形式。 你必须为每个不同的模式。 你包括在Form中选择,选择狗/猫。 然后在你的行动,你这样做:

if($form->isValid($_POST)){  
  switch($form->select->getValue()){
    case "dog":
      $this->_forward('add-dog','pets','default');
      break;
    case "cat":
      $this->_forward('add-cat','pets','default');
      break;    
  }
}

而你办理单独行动猫狗不同的东西。 这样做的好处是,所有的参数一起发送。 在constrast当你使用$这 - > _重定向()的POST参数将会丢失。 这是在某些情况下,预期增加你让一个重定向到评论列表页面,以避免双重职位,该消息的评论后的行为(例如,“页面需要重新发送数据...”。



Answer 5:

以前是有框架的文档,我发誓的一部分在总体水平解释了调度工作流程。 那里有此图 ,但其awefully复杂的解释_forward做什么。

当在动作_forward将设置$request->isDispatched = false ,并设置来调用指定_forward控制器/动作的请求。 执行postDispatch期间,isDispatched检查 - 如果它的虚假,整个事情再次运行使用新的请求。

所以...如果你的动作你手工绘制的意见,他们还是会得到呈现。 在动作仍然会发生的一切,它只是另一个动作也将发生之后。

[编辑问题后编辑]

前锋并不意味着该响应/确认,之后员额 - 使用重定向为。 $this->_helper->redirector->gotoUrl()等。



文章来源: Zend Framework, what $this->_forward is doing