Yii2:如何动态地向模型类添加验证规则?

时间:2015-06-19 19:45:03

标签: php reflection model yii2

根据Yii2文档,验证规则可以应用于隐式属性(表字段)或userDefined属性。

有没有办法为动态添加到模型类的属性创建验证规则?

例如:

让我们有名为'Filter'的模型类和另一个名为'Category'的模型类 - 像笔记本电脑,掌上电脑,桌面等类别。我可能想要使用触控板区域作为笔记本电脑类别和对角线长度的过滤器之一掌上电脑类别的过滤器之一,等等。因此,在每种情况下,过滤条件根据我选择的类别而有所不同,我可能希望将其添加到模型类中,动态过滤,如果通过post加载,则验证是否成功。

1 个答案:

答案 0 :(得分:2)

您可以对rules() - 函数进行编码,以根据场景和数据输入构建一组验证规则。并不要求这是一个固定的数组。不幸的是,这样做会让你在前端遇到验证问题(如果你需要的话),那里的动态规则效果不好。

从我收集的评论中,最大的问题似乎是属性没有加载到模型中。这主要是因为load()setAttributes()仅填充被认为是safe的属性。

有两种方法可以将属性定义为安全:

  • 给它一个验证规则(至少safe
  • 将其添加到safeAttributes()返回的属性列表中(通过覆盖它)