之間也是有差別的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請求(一個找到重定向,第二個執行它),另一個只有一個在調度過程之前被調用(糾正我,如果我錯了)。