Validation Yii2验证。在多个属性上运行筛选器

Validation Yii2验证。在多个属性上运行筛选器,validation,yii2,Validation,Yii2,如何获取正在处理的属性名?我发现的唯一解决方法是为每个属性单独设置过滤器…传递给验证函数的第一个参数是$attribute,因此可以按如下方式使用它 public function rules() { return [ [['option_list', 'modifier'], 'filter', 'filter' => function($value) { // I can get the value but I don't know to

如何获取正在处理的属性名?我发现的唯一解决方法是为每个属性单独设置过滤器…

传递给验证函数的第一个参数是
$attribute
,因此可以按如下方式使用它

public function rules()
{
    return [
        [['option_list', 'modifier'], 'filter', 'filter' => function($value) {
            // I can get the value but I don't know to which attribute it belongs (option_list or modifier)
        }],
    ];
}
公共功能规则()
{
返回[
[['选项列表','修饰符'],函数($attribute){
//将$this->$属性用于条件或筛选
//使用$this->addError($attribute,'')添加错误
}],
];
}

请参见

是的,但针对验证器。请注意,我使用了“filter”。@SergeyOnishchenko是的,但实际上
filter
只是Yii2核心验证器之一。在自己的规则中,您也可以轻松执行筛选。是的,这是可以的,但在这种情况下,数据修改而不是验证并不明显。@SergeyOnishchenko它只是验证规则名称的语义值。您可以将验证规则函数命名为
myFilter
,并将其用作过滤器。或者您可以使用适当的调用语义创建自己的验证类(可能是从内置继承的)
public function rules()
{
    return [
        [['option_list', 'modifier'], function($attribute) {
            // use $this->$attribute for conditions or filtering
            // use $this->addError($attribute, '<error message>') for adding errors
        }],
    ];
}