我有一个表,我分为两个部分,每个我在控制器下提到两个动作,我想为这两个动作分开验证规则,所以我不想使用通用模型规则。
有什么方法可以让我在行动中写下规则。
我有用户控制器,我已经定义了两个名为frontuser
和backenduser
的操作。
我在控制器中的动作
public function actionfrontuserCreate()
{
// want to write rule here
}
public function actionbackenduserCreate()
{
// want to write rule here
}
由于
答案 0 :(得分:1)
嗨,我希望我能帮到你:
规则应该在模型中声明,即使模型是在一个或多个具有不同类型操作的控制器之间共享的......
但您不希望在所有这些操作中执行规则,因此您指定可以使用scenarios执行该规则的操作,我为您举个例子:
array('password_repeat', 'required', 'on'=>'register'),
上面的代码只在场景寄存器
上生成pasword_repeat然后在您的控制器中,您将指定将使用的场景......
$modelA = User::model()->findByPk(1); // $model->scenario = 'update'
$modelB = new User(); // $model->scenario = 'insert'
$modelB->scenario = 'light'; // custom scenario
if ($modelB->validate()) { ...
我希望这可以解决你的问题,我建议检查默认的yii场景插入,更新,删除....
答案 1 :(得分:1)
验证规则不在控制器中的模型中。你想要做的是使用场景。 当您在模型中放置规则时,您可以执行以下操作:
array('username', 'required', 'on'=>'frontUserCreate'),
使用'' =>' ...'您可以告诉您必须应用规则的情况。 在创建新模型时,在控制器中,您应该将场景作为参数:
public function actionfrontuserCreate()
{
$model = new User('frontUserCreate');
if (isset($_POST['User']) {
....
}
$this->render('viewname', array('model'=>$model));
}