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
Advertisement
Answer
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