在 Yii 2 的规则方法中使用来自其他类的过滤器


Using filters from other classes within rules method in Yii 2?

考虑模型中的以下代码:

public function rules() {
    return [
        [['company_name', 'first_name', 'last_name'], 'sanitize'],
        //........
    ];
}

sanitize 是当前类中的一个自定义方法,它是:

public function sanitize($attribute) {
    $this->{$attribute} = general::stripTagsConvert($this->{$attribute}, null, true);
}

现在这种方法显然会在许多模型中派上用场,所以我不想在每个模型中重复相同的代码。有没有办法在规则中引用另一个类来代替绑定到当前类的当前sanitize方法名称?

是的,这绝对是可能的。

创建单独的验证器。假设它被称为SanitizeValidator并放置在common/components文件夹中。

自定义验证程序

必须从框架基础验证程序扩展并重写validateAttribute()方法。将您的逻辑放入此方法中:

use yii'validators'Validator;
class SanitizeValidator extends Validator
{
    /**
     * @inheritdoc
     */
    public function validateAttribute($model, $attribute)
    {
        $model->$attribute = general::stripTagsConvert($model->$attribute, null, true);
    }
}

然后在模型中,您可以像这样附加此验证器:

use common/components/SanitizeValidator;
/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['company_name', 'first_name', 'last_name'], SanitizeValidator::className()],
    ];
}

在此处和那里查看有关自定义验证器的官方文档。