在Yii中验证相关模型的属性

Hip*_*jim 1 php mysql yii

我在Yii有四个模特.汽车,赛车,豪华汽车和司机.

RaceCar has_one Driver

LuxuryCar has_one Driver

RaceCar和LuxuryCar都继承了相同的模型 - Car - 使用相同的表继承.

LuxuryCar和RaceCar中都有一个"fuel_level"属性,用于更改Driver中的验证规则(如果RaceCar.fuel_level为零,则Driver不能将属性"action"设置为"driving").

而不是必须添加每个可能的"属于"关系驱动程序(我可能会添加更多继承的汽车模型),然后检查以查看驱动程序当前属于哪种汽车,以便我可以从数据库加载模型再次,我希望能够验证父级中Driver的属性值(例如RaceCar).

这可能吗?如果是这样,怎么样?如果没有,是否有更好的方式让我失踪?

Jon*_*Jon 6

一种解决方案是简单地driver为您的汽车属性添加自定义(例如内联)验证规则:

public function rules() {
    return array('driver', 'validateDriver');
}

public function validateDriver() {
    if (!$this->driver->isFoo) {
        $this->addError('driver', Yii::t('validation', '{attribute} is not foo!'));
    }
}
Run Code Online (Sandbox Code Playgroud)