如何仅在请求页面中设置yii必填字段但不创建/更新?

时间:2013-02-01 03:02:25

标签: php yii

有没有人知道我该怎么做才能要求用户只在请求页面填写输入,而不是在创建/更新页面?我有自己想做的事情。

在用户模型中

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,
    ));
}

但不知怎的,这不起作用。

1 个答案:

答案 0 :(得分:9)

您必须使用scenario创建模型,以便适用scenario适用的规则。

假设您的scenariosome_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');

Here's a yii wiki您可能想要阅读。

修改:在您的情况下,您可以在创建模型对象后设置scenario,方法是直接设置scenario property

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

// ...