假设我有一种可以带有颜色的产品。根据产品类型,可能需要也可能不需要颜色字段。

如果始终需要颜色,我将在产品型号中添加以下内容

public function rules()
{
    return array(
        array('colour', 'required')
    );
}

但是,我希望这取决于产品类型是动态的。

是否应该在 Controller 中完成?我可以想象在 Controller 中有类似以下内容的东西:
public function actionOrder() {
    // ....
    if ($product->HasColour) {
        // set the colour validation to be required
    } else {
        // set the colour validation to be not required
    }
}

解决此问题的最佳方法是什么?

谢谢

最佳答案

您可以使用方案。在模型中:

class Model extends CActiveRecord {
    // ....
    public function rules() {
        return array(
            array('colour', 'required', 'on' => 'hasColour')
        );
    }
    // ....
}

并在 Controller 中:
public function actionOrder() {
    // ....
    $model = new Product();
    if ($product->HasColour) {
        $model->setScenario('hasColour');
    }
}

因此,当模型的方案为hasColour时,所需的颜色将得到验证

10-08 04:44