余事后的缺陷


defect in afterAction in Yii

当我在操作中使用重定向时,afterAction方法(在控制器.php中)不起作用!如何解决此问题?

注意:我不能在操作之前使用,因为我在我的操作中生成了一个变量,我在 afterAction 中使用它提前感谢...

    public function actionHsh()
    {
        $this->hesam= 502;
        $this->redirect(array('charge/printMyCharge'));
    }

而在主计长中

    protected function afterAction($action)
    { 
       $number = $this->hesam= 502;
    }

让我们从"为什么它不起作用?"开始。因为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);
    }
}

重定向前使用后操作享受它!