Задать вопрос

Как исправить ошибку при регистрации пользователя на phalcon?

Начал осваивать placon и запнулся на этом уроке
https://docs.phalconphp.com/ru/latest/reference/tu...

Когда скачал пример invo, установил его бд из папки schemas.
То при регистрации пользователя на чала всплывать ошибка:
Catchable fatal error: Argument 1 passed to Phalcon\Mvc\Model::validate() must implement interface Phalcon\ValidationInterface, instance of Phalcon\Mvc\Model\Validator\Email given in C:\www\OpenServer\domains\localhost\invo\app\models\Users.php on line 13

При этом когда я вхожу как demo@phalconphp.com, то всё норм авторизуется и именно из базы

Код users.php
<?php

use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Validator\Email as EmailValidator;
use Phalcon\Mvc\Model\Validator\Uniqueness as UniquenessValidator;

class Users extends Model
{
    public function validation()
    {
        $this->validate(new EmailValidator(array(
            'field' => 'email',
        )));
        $this->validate(new UniquenessValidator(array(
            'field' => 'email',
            'message' => 'Sorry, The email was registered by another user'
        )));
        $this->validate(new UniquenessValidator(array(
            'field' => 'username',
            'message' => 'Sorry, That username is already taken'
        )));
        if ($this->validationHasFailed() == true) {
            return false;
        }
    }
}
  • Вопрос задан
  • 882 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@ZaxapKramer
Больной верстальщик
Какой версией фреймворка Вы пользуетесь?
В версии 2.1 разработчики отказались от отдельного валидатора в моделях (по-моему, это правильное решение).

Используйте Validation:
<?php
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Email as EmailValidator;
use Phalcon\Validation\Validator\Uniqueness as UniquenessValidator;

class Users extends Model
{
    public function validation()
    {
        $validation = new Validation();

        $validation
            ->add('email', new EmailValidator())
            ->add('email', new UniquenessValidator(array(
                'model'   => $this,
                'message' => 'Sorry, The email was registered by another user'
            )))
            ->add('username', new UniquenessValidator(array(
                'model'   => $this,
                'message' => 'Sorry, That username is already taken'
            )));

        return $this->validate($validation);
    }
}


А ошибки, если что, Вы можете вывести в котнроллере, используя метод flash, конечно же, передав в него свою модель:
<?php
// ...

$user = new Users;

foreach ($user->getMessages() as $message) {
    $this->flash->error($message->getMessage());
}

// ...


P.S. Фреймворк развивается, документация устаревает :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы