假设我有一种可以有颜色的产品.根据产品类型,可能需要也可能不需要色域.
如果总是需要颜色,我会在产品型号中有以下内容
public function rules()
{
return array(
array('colour', 'required')
);
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望这是动态的,具体取决于产品类型.
这应该在控制器中完成吗?我想在控制器中有类似的东西:
public function actionOrder() {
// ....
if ($product->HasColour) {
// set the colour validation to be required
} else {
// set the colour validation to be not required
}
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?
谢谢
Rez*_*mad 15
您可以使用方案.在模型中:
class Model extends CActiveRecord {
// ....
public function rules() {
return array(
array('colour', 'required', 'on' => 'hasColour')
);
}
// ....
}
Run Code Online (Sandbox Code Playgroud)
在控制器中:
public function actionOrder() {
// ....
$model = new Product();
if ($product->HasColour) {
$model->setScenario('hasColour');
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当模型的场景是,所需的颜色将被验证 hasColour
小智 9
class LoginForm extends CFormModel
{
public $username;
public $password;
}
$form = new LoginForm();
$form->validatorList->add(
CValidator::createValidator('required', $form, 'username, password')
);
Run Code Online (Sandbox Code Playgroud)
现在$ form有两个必填字段.