Как добавить валидаторы на лету в Symfony2?

У меня есть поле формы password(notсопоставлено с Userpassword ) для использования в форме смены пароля вместе с двумя другими (сопоставленными) полями, firstи last.

Приходится добавлять валидаторы на лету: если значение для пароля пустое, то валидациине должно происходить. В противном случае необходимо добавить новые валидаторыMinLengthи MaxLength.

Вот что я сделал до сих пор: создал повторяющееся поле password, добавил CallbackValidatorи returnif $form-> getData()равно null.

Тогда как я могу добавить валидаторы минимальной и максимальной длины в поле $?

    $builder = $this->createFormBuilder($user);

    $field = $builder->create('new_password', 'repeated',  array(
            'type'          => 'password',
            'first_name'    => 'Password',
            'second_name'   => 'Confirm password',
            'required'      => false,
            'property_path' => false // Not mapped to the entity password
        ));

    // Add a callback validator the the password field
    $field->addValidator(new Form\CallbackValidator(function($form) {
        $data = $form->getData();

        if(is_null($data)) return; // Field is blank

        // Here password is provided and match confirm, check min = 3 max = 10

    }));

    // Add fields to the form
    $form = $builder
        ->add('first', 'text', array('required' => false)) // Mapped
        ->add('last',  'text', array('required' => false)) // Mapped
        ->add($field)                                      // Not mapped
        ->getForm();
6
задан j0k 20 September 2012 в 12:15
поделиться