3

タイトルはわかりにくいかもしれませんが、ここではコードを使って説明します。

条件によっては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連絡先URLにリダイレクトできます。

解決策1は私にとっては問題なく機能すると思いますが、それをお勧めします。しかし、私はyiiを初めて使用するので、その方法がわからないか知りたいのですが。

4

3 に答える 3

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');
}
于 2012-04-10T07:53:35.280 に答える
3

「コードを繰り返す」が正解になることはめったにありません。リダイレクトには追加のオーバーヘッドが伴います。私の意見では、リダイレクトは、このようにではなく、POSTアクションに応答して使用する必要があります。この場合、ソリューション1を使用します。

于 2012-04-10T07:20:26.493 に答える
3

4番目のオプションを使用できます。これは、アクションのインデックス作成と連絡に共通する部分を3番目の方法にリファクタリングすることです。

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

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

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

ただし、最適なオプションは特定のケースによって異なります。たとえば、別のアクションを呼び出す必要があると判断した場合、そのビューもレンダリングしますか?

于 2012-04-10T07:21:47.633 に答える