Phalcon \ Mvc \ Model :: validation () и немодельные валидаторы

Я работаю над проверкой модели с помощью вызова Model :: validation ().

Похоже, Model: validate () принимает только валидаторы из пространства имен Phalcon \ Mvc \ Model \ Validator и вылетает, когда используются Phalcon \ Validation \ Validator :

class User extends Phalcon\Mvc\Model { protected $email = 'invalid @email.*'; public function validation() { // Validator from Model namespace $this->validate(new Phalcon\Mvc\Model\Validator\Uniqueness(array( "field" => "email", "message" => "The email is already registered" ))); // Validator from Validation namespace - causes "BadMethodCallException" - "Wrong number of parameters". $this->validate(new Phalcon\Validation\Validator\Between(array( "field" => "counter", 'minimum' => 10, 'maximum' => 20, "message" => "Invalid value" ))); $validationHasFailed = $this->validationHasFailed(); return $validationHasFailed != true; } } 

Это приводит к ошибке BadMethodCallException – неправильное количество ошибок параметров .

Моя следующая мысль заключалась в том, чтобы изменить код следующим образом:

 class User extends Phalcon\Mvc\Model { protected $email = 'invalid @email.*'; public function validation() { // Omitting Uniqueness validator. $validation = new Phalcon\Validation(); $validation->add('email', new Phalcon\Validation\Validator\Email); $this->validate($validation); $validationHasFailed = $this->validationHasFailed(); return $validationHasFailed != true; } } 

Однако этот код не может обнаружить недопустимое значение поля электронной почты (ошибка проверки не возникает).

В то же время следующая проверка подлинности электронной почты работает так, как ожидалось:

 $validation = new Validation(); $validation->add('email', new EmailValidator()); $messages = $validation->validate([ 'email' => 'bad email @...', ], 'email'); 

Вопрос:

Могу ли я использовать немодельные валидаторы в вызове Model :: validation ()?

Благодаря!

Related of "Phalcon \ Mvc \ Model :: validation () и немодельные валидаторы"

Ну, ответ на мой вопрос НЕТ.

Вот обходной путь:

 public function validation() { /** * Validate email address. * * Looks like there's a difference between model- and non-model validators. */ $emailField = 'email'; $validation = new Phalcon\Validation; $validation->add($emailField, new Phalcon\Validation\Validator\Email); /** * @var Phalcon\Validation\Message\Group */ if (sizeof($messages = $validation->validate([ $emailField => $this->email, ], $emailField))) { $message = new Phalcon\Mvc\Model\Message('Invalid email address.', $emailField); $this->appendMessage($message); } else { /** * Only when non-model validators don't fail, get on with model validators * * Validate email uniqueness. */ $this->validate(new Phalcon\Mvc\Model\Validator\Uniqueness([ 'field' => $emailField, 'message' => 'The email is already registered' ])); } $validationHasFailed = $this->validationHasFailed(); return $validationHasFailed != true; } 

Надеюсь, кто-то найдет это полезным.