当我在动作中使用重定向时,afterAction方法(在controller.php中)不起作用!! 我该如何解决这个问题?
注意:我不能使用beforeAction,因为我在我的动作中生成一个变量,我在afterAction中使用它 提前谢谢......
public function actionHsh()
{
$this->hesam= 502;
$this->redirect(array('charge/printMyCharge'));
}
在CController中
protected function afterAction($action)
{
$number = $this->hesam= 502;
}
答案 0 :(得分:4)
让我们从" 开始,为什么它不起作用?"。因为CController::redirect()
的定义如下:
public function redirect($url,$terminate=true,$statusCode=302)
{
if(is_array($url))
{
$route=isset($url[0]) ? $url[0] : '';
$url=$this->createUrl($route,array_splice($url,1));
}
Yii::app()->getRequest()->redirect($url,$terminate,$statusCode);
}
和CHttpRequest::redirect()
的定义如下:
public function redirect($url,$terminate=true,$statusCode=302)
{
if(strpos($url,'/')===0 && strpos($url,'//')!==0)
$url=$this->getHostInfo().$url;
header('Location: '.$url, true, $statusCode);
if($terminate)
Yii::app()->end(); // Notice this? We only stop when $terminate is true
}
基本上你可以做两件事。
1)使用redirect($url, false)
来避免终止
2)扩展控制器中的redirect
方法:
class Foo extends CController
{
public function redirect($url,$terminate=true,$statusCode=302)
{
if (method_exists($this, 'afterAction')) {
$this->afterAction(null);
}
parent::redirect($url,$terminate,$statusCode);
}
}
答案 1 :(得分:1)
在重定向之前使用afteraction 享受它!