2

Все привет. Кто сталкивался с компонентом PhalconValidation? Я, прочитав документацию, не могу понять, как производить валидацию, набросал вот такой вот подход:

public function initialize()
    {
        $this->add('name', new PresenceOf(array(
            'message' => 'Вы не заполнили Имя и Фамилию'
        )));

        $this->add('name', new RegexValidator(array(
            'pattern' => '/^[а-яА-ЯёЁa-zA-Z-]+$/ui',
            'message' => 'Имя и Фамилия могут содержать только буквы и тире'
        )));

        $this->add('name', new StringLength(array(
            'max' => 50,
            'min' => 5,
            'messageMaximum' => 'Имя и Фамилия не может содержать больше 50 символов',
            'messageMinimum' => 'Имя и Фамилия не может содержать меньше 5 символов'
        )));

        $this->add('email', new PresenceOf(array(
            'message' => 'Вы не заполнили Email адрес'
        )));

        $this->add('email', new Email(array(
            'message' => 'Не корректный Email адрес'
        )));

        $this->add('password', new PresenceOf(array(
            'message' => 'Вы не заполнили Пароль'
        )));

        $this->add('password', new StringLength(array(
            'min' => 8,
            'minimumMessage' => 'Пароль не может быть короче 8 символов'
        )));

        $this->add('confirm', new PresenceOf(array(
            'message' => 'Вы не заполнили Подтверждение пароля'
        )));

        $this->add('password', new Confirmation(array(
            'message' => 'Пароли не совпадают',
            'with' => 'confirm'
        )));
    }

Это неправильный подход, потому что если формы пустые, ошибки всплывают все, а не те, что проверяют форму на пустоту. Как исправить такое положение?

И да, если установить 'cancelOnFail' => true, то валидация не пройдёт дальше той валидации, которая имеет этот параметр первая в очереди.

UPD 06.11.14:

Приведу пример валидации.

Есть 4 поля, к примеру (имя/емэйл/пароль/и подтверждение пароля).

Первым делом валидация проверяет заполнены поля или нет, потом поэтапно каждое поле, то есть изначально он проверяет все поля на пустоту, а потом все поэтапно, и поля не связаны между собой, за исключением пароля, и его подтверждения. Как то так.

1
  • 1
    Кажется, нет знатоков Phalcon'а. :)
    – Bastiane
    29 окт 2014 в 22:07

1 ответ 1

0

В чем проблема производить валидацию в два этапа и считать сообщения по выходу с первого? Зачем нужен PresenceOf, если для этого поля уже работает StringLength/Confirmation/Email?

Phalcon, конечно, фреймворк с прибабахом, и валидация должна идти по группам, приложение разбиваться по неймспейсам, а объявление всего и вся через анонимные функции - это откровенная laravel-блевня, но здесь-то и задачи как таковой не стоит.

Обновление

@Bastian, если вы уже в самой задаче бьете ее на два этапа? Валидация одна, этапов два. Хотя объектов валидации будет два, наверное, мне лень было так глубоко лезть

2
  • 1
    @Etki так форма одна, значит и валидация этой формы одна, разве нет? На счет PresenceOf это да, но не суть важно, важно, чтобы валидация была не вся сразу.
    – Bastiane
    4 ноя 2014 в 1:23
  • 1
    @Etki как мне кажется делить на два эта одну валидацию не есть хорошо, к примеру, в kohana проще некуда, та сама собой валидация идет последовательно, то есть если поле не пустое, то идет следующая валидация, и так далее. Я же думал, что в фалконе тоже можно сделать подобное. :)
    – Bastiane
    4 ноя 2014 в 13:07

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.