对 rules 进行继承,怎么改变父级的 required 的属性? [ 2.0 版本 ]
比如我在父级模型 Operation
的 rules
里面定义了一个 name 为 required
属性,可是我子级模型 Flink
继承了这个 rules
,可是我这个子级的 name 不是必填项,我已经在 beforeSave
里面设置了它的值了,可是他还是提示空值,应该是没有在表单里面填写,那么要怎么不重写 rules
,而是通过继承的方法,把name 的这个 required
去掉,好像没有 unrequired
这个属性。这个要怎么处理?
共 4 个回答
-
自己堵自己的路嘛你这是。
继承就是原封不动的拿来,子类不写 rules 方法。
所以 rules 是啥还是啥,继承多少代都是如此,规则永不变!name 就是required
。
纯继承想解决问题,是一定不行的。所以,你想“不重写 rules,而是通过继承的方法“之外,还需要其它方面做些改动,那就是:
必须在规则验证前赋值 name,让它符合required
规则就行,这个思路你看可以吗?
那么如何在之前赋值呢?先说说你的beforeSave()
吧:
你把子类的name在beforeSave
里赋值,这个是可以的。但是,时机不对。因为validate()
是在beforeSave()
之前验证的,那时子类的 name 还是为空哦。
那咋办?
换时机啊,在beforeValidate()
不就可以了嘛。
Yii2 的 AR 模型体系里,从赋值到入库留了好多事件,这些事件就是你注入自定义代码的机会。
看看哪个是你可以用的。不求而得的往往求而不得 , murenhui 觉得很赞
clao
注册时间:2018-08-03
最后登录:2022-01-25
在线时长:9小时19分
最后登录:2022-01-25
在线时长:9小时19分
- 粉丝1
- 金钱80
- 威望20
- 积分370