有没有人知道我该怎么做才能要求用户只在请求页面填写输入,而不是在创建/更新页面?我有自己想做的事情。
在用户模型中
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,
));
}
但不知怎的,这不起作用。
答案 0 :(得分:9)
您必须使用scenario
创建模型,以便适用scenario
适用的规则。
假设您的scenario
为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');
Here's a yii wiki您可能想要阅读。
修改:在您的情况下,您可以在创建模型对象后设置scenario
,方法是直接设置scenario
property:
$model = $this->loadModel($id);
$model->scenario = 'request';
// ...