Yii - 从另一个动作方法调用动作方法

时间:2012-04-10 07:14:39

标签: php yii

标题可能令人困惑,但这是对代码的解释。

根据某些条件, 即使用户已拨打actionContact,我也可以致电actionIndex

解决方案:1

 public function actionIndex()
    { 
        $a = 5;
        if($a == 5){


$this->actionContact();
        }
        else{
            $this->render('index');
        }
    }

    public function actionContact()
    {
        // Some codes
        $this->render('contact');
    }

解决方案:2

public function actionIndex()
        { 
            $a = 5;
            if($a == 5){


// Repeat code from actionContact method
            $this->render('contact');
        }
        else{
            $this->render('index');
        }
    }

解决方案:3 我可以重定向到联系人网址。

我认为,解决方案1对我来说很好,我宁愿这样做。 但是,既然我是yii的新手,我想知道,如果要走的路?

3 个答案:

答案 0 :(得分:9)

如果没问题,可以使用转发

http://www.yiiframework.com/doc/api/1.1/CController#forward-detail

public function actionIndex()
{ 
    $a = 5;
    if($a == 5){
        // Forward user to action "contact"
        $this->forward('contact'); 
    }
    else{
        $this->render('index');
    }
}

public function actionContact()
{
    // Some codes
    $this->render('contact');
}

答案 1 :(得分:3)

“重复代码”很少是正确的答案。重定向涉及额外的开销,在我看来,它们应该主要用于响应POST操作,而不是像这样。在这种情况下,我会选择解决方案1.

答案 2 :(得分:3)

您可以使用第四个选项,即将索引和联系操作常用的部分重构为第三个方法:

public function common() {
    // ...
}

public function actionIndex() {
    // ... call $this->common()
}

public function actionContact() {
    // ... call $this->common()
}

但最好的选择取决于您的具体情况。例如,当您决定必须调用其他操作时,是否也要渲染其视图?