考虑模型中的以下代码:
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 yiivalidatorsValidator;
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()],
];
}
在此处和那里查看有关自定义验证器的官方文档。