Yii - dynamically change rules from controller
php, yii
Solution
You can use scenario. In the model:
class Model extends CActiveRecord {
// ....
public function rules() {
return array(
array('colour', 'required', 'on' => 'hasColour')
);
}
// ....
}
And in the controller:
public function actionOrder() {
// ....
$model = new Product();
if ($product->HasColour) {
$model->setScenario('hasColour');
}
}
So, required colour will be validated when the model's scenario is `hasColour`
Problem
Let's say I have a product which can have a colour. Depending on the product type, the colour field may or may not be required. If colour is always required, I would have the following in the product model ``` public function rules() { return array( array('colour', 'required') ); } ``` However, I want this to be dynamic depending on the product type. Should this be done in the controller? I would imagine having something like the following in the controller: ``` public function actionOrder() { // .... if ($product->HasColour) { // set the colour validation to be required } else { // set the colour validation to be not required } } ``` What is the best way to approach this? Thanks