之间也是有差别的Zend的重定向什么是这两个方面
$this->_redirect('controller/action');
和
之间的真正区别$request->setControllerName('controller')
->setActionName('action');
我的猜测是,第一个也许使用幕后的第二个。有人知道吗?
之间也是有差别的Zend的重定向什么是这两个方面
$this->_redirect('controller/action');
和
之间的真正区别$request->setControllerName('controller')
->setActionName('action');
我的猜测是,第一个也许使用幕后的第二个。有人知道吗?
的重定向助手允许 使用转向器对象帮助 自己的应用 转向需要一个新的URL。它提供了对_redirect 许多好处() 方法,如能 预配置整个站点的行为 在转向器对象或使用 内置gotoSimple($行动, $控制器,$模块,$ params)方法 接口类似于 Zend_Controller_Action :: _ forward()。
与请求对象中的setController()和setAction()相比,主要区别在于您将更改url(302重定向),而不仅仅是操作。另外,正如你所看到的,_redirect()方法是redirecotor helper的一个快捷方式,它提供的功能远不止是重定向。你可以在这里看到这些:http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#Redirector
的$此 - > _ forward()方法做同样的setController()和setAction命令(),是依靠Zend_Controller_Action类的方法:
final protected function _forward($action, $controller = null, $module = null, array $params = null)
{
$request = $this->getRequest();
if (null !== $params) {
$request->setParams($params);
}
if (null !== $controller) {
$request->setControllerName($controller);
// Module should only be reset if controller has been specified
if (null !== $module) {
$request->setModuleName($module);
}
}
$request->setActionName($action)
->setDispatched(false);
}
如果你在Zend_Controller_Action上,你可以使用上面的这个方法,但是如果你在Zend_Controller_Plugin上,例如你需要直接使用请求对象。
例如,当您提交表单时,如果用户刷新页面,那么这是一个很好的实践重定向而不是转发,以防止表单被提交两次。
有关此proccess的更多信息:
http://framework.zend.com/manual/en/zend.controller.dispatcher.html
第一个是通过发送302头进行物理重定向。第二个更类似于_forward()所做的 - 更改当前请求的控制器名称和操作。
不同的是,重定向助手只是将HTTP重定向头,同时改变的请求参数要求调度到(如果已经运行再一次)来运行,做一个成功的重定向,所以你在哪里是很重要的调用该方法。
似乎最大的区别在于第一个至少有两个HTTP请求(一个找到重定向,第二个执行它),另一个只有一个在调度过程之前被调用(纠正我,如果我错了)。