在 Yii 2 验证之前/期间对表单数据运行函数


Running functions on form data before/during validation in Yii 2

好的,例如,如果有人输入用户名,而我想在验证开始时(在我的rules方法中)在OR之前将其设置为小写,我该怎么做?

我知道你可以用修剪做类似的事情,例如:

[['company_name', 'first_name', 'last_name', 'email', 'username', 'password', 'password2'], 'trim']

但我认为这不支持任何功能?

所以,我想在用户名上运行strtolower函数,有什么方法可以做到这一点?我是否需要使用 beforeValidate 方法,或者我可以做这样的事情吗?

['username', 'makeLower']
public function makeLower($attribute, $params) {                
    $this->$attribute = strtolower($this->$attribute);
}

您可以使用FilterValidator .

['username', 'filter', 'filter' => 'strtolower']

FilterValidator实际上不是一个验证器,而是一个数据处理者。它 调用指定的筛选器回调来处理属性值 并将处理后的值保存回属性。过滤器必须是 具有以下签名的有效 PHP 回调:

function foo($value) {...return $newValue; }

许多 PHP 函数限定此签名(例如 trim() )。