Быстрый, но не единственный, способ создать собственное правило валидации данных.
Сначала для этого мы в модели создаем новый метод, который будет использоваться в качестве валидатора:
/**
* Метод проверяет тотожность паролей, например, что новые пользователи вводят в форме регистрации на нашем сайте.
* Этот метод является валидатором 'passwordMatch' для метода rules().
*/
public function passwordMatch ( $attribute ) {
if ( $this->password !== $this->password2 )
$this->addError ( $attribute, "Пароли не совпадают" );
}
Имя метода должно быть уникальним, то есть, не совпадать с именем уже существующего валидатора.
Этот метод в нашем случае принимает один параметр:
Далее, все что остается, это добавить новый валидатор в список правил проверки.
В списке правил указываем это правило валидации для нужного нам поля:
public function rules () {
return array (
...
array ( 'password', 'passwordMatch' ),
...
);
}
Как Вы видите, внутри метода passwordMatch мы делаем вызов CModel::addError.
Данный метод регистрирует ошибку валидации. Принимает два параметра:
Пример с передачей параметра нашему новому правилу валидации:
public function passwordMatch ( $attribute, $params ) {
// $params - массив дополнително переданных параметров
if ( $param['someParamName'] ) {
// Do something with param...
}
)
if ( $this->password !== $this->password2 )
$this->addError ( $attribute, "Пароли не совпадают" );
}
public function rules () {
return array (
...
array ( 'password', 'passwordMatch', 'someParamName'=>'some_value' ),
...
);
}