2

ユーザーがリクエストページにのみ入力を入力し、作成/更新ページには入力しないようにするには、どうすればよいか知っている人はいますか?そんなことをしたいという自分の理由がありました。

ユーザーモデル

array('user_email, user_name', 'required','on'=>'request'),  //I want this only occur when on my request page

ユーザーコントローラー内

public function actionRequest()
{
    $id=Yii::app()->user->uid;
    $model=$this->loadModel($id);

    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        if ($model->validate('request')) 
        {
            if($model->save())
            {
                $this->redirect(array('view','id'=>$uid));
            }
        }
    }

    $this->render('request',array(
        'model'=>$model,
    ));
}

しかし、どういうわけかこれは機能しません。

4

1 に答える 1

9

scenario適用可能なルールを適用できるように、を使用してモデルを作成する必要がscenarioあります。

scenarioあなたが isであるとしましょう。次に、使用を次のようsome_scenarioに宣言すると:rules

array('user_email, user_name', 'required', 'on'=>'some_scenario')
// now the user_email, user_name will be required properties only when the scenario is 'some_scenario'

シナリオをモデルに適用するには、次のように、そのシナリオでそのモデル インスタンスを作成する必要があります。

$model = new SomeModel('some_scenario');

ここに、あなたが読みたいと思うかもしれないyii wikiがあります。

編集:あなたの場合、プロパティscenarioを直接設定することにより、モデルオブジェクトの作成後に設定できます:scenario

$model = $this->loadModel($id);
$model->scenario = 'request';

// ... 
于 2013-02-01T03:49:10.433 に答える