Yii2:如何动态地向模型 class 添加验证规则?
Yii2: How to add validation rules to the model class dynamically?
根据 Yii2 文档,验证规则可以应用于隐式属性(table 字段)或用户定义的属性。
有没有办法为动态添加到模型的属性创建验证规则class?
例如:
让模型 class 命名为 'Filter' 和另一个模型 class 命名为 'Category' - 笔记本电脑、掌上电脑、台式机等类别。我可能想使用触控板面积作为笔记本电脑类别的过滤器之一,对角线长度作为掌上电脑类别的过滤器之一,依此类推。因此,在每种情况下,过滤条件都会根据我选择的类别而有所不同,我可能想将其添加到模型中 class 动态过滤并验证通过 post 加载是否成功。
您可以对 rules()
函数进行编码,以根据场景和数据输入构建一组验证规则。不要求这是一个固定数组。不幸的是,这样做会在前端留下验证问题(如果您需要的话),那里的动态规则效果不佳。
从我收集到的评论来看,最大的问题似乎是属性没有加载到模型中。这主要是因为 load()
和 setAttributes()
都只填充被认为是 safe
.
的属性
有两种方法可以将属性定义为安全的:
- 给它一个验证规则(至少
safe
)
- 在
safeAttributes()
返回的属性列表中获取它(通过覆盖它)
根据 Yii2 文档,验证规则可以应用于隐式属性(table 字段)或用户定义的属性。
有没有办法为动态添加到模型的属性创建验证规则class?
例如:
让模型 class 命名为 'Filter' 和另一个模型 class 命名为 'Category' - 笔记本电脑、掌上电脑、台式机等类别。我可能想使用触控板面积作为笔记本电脑类别的过滤器之一,对角线长度作为掌上电脑类别的过滤器之一,依此类推。因此,在每种情况下,过滤条件都会根据我选择的类别而有所不同,我可能想将其添加到模型中 class 动态过滤并验证通过 post 加载是否成功。
您可以对 rules()
函数进行编码,以根据场景和数据输入构建一组验证规则。不要求这是一个固定数组。不幸的是,这样做会在前端留下验证问题(如果您需要的话),那里的动态规则效果不佳。
从我收集到的评论来看,最大的问题似乎是属性没有加载到模型中。这主要是因为 load()
和 setAttributes()
都只填充被认为是 safe
.
有两种方法可以将属性定义为安全的:
- 给它一个验证规则(至少
safe
) - 在
safeAttributes()
返回的属性列表中获取它(通过覆盖它)