Symfony2 формы повторяющихся элементов пользовательских меток - PullRequest
11 голосов
/ 04 ноября 2011

Я использую Symfony2 и CraueFormFlowBundle для создания многошаговой формы.Все идет хорошо, за исключением моего повторного поля электронной почты.Я не могу ради себя найти, как поставить ярлыки, которые хочу.Я отрисовываю форму самостоятельно в представлении Twig с помощью form_widget (...) и пишу метки.Я позиционирую все, что хочет мой клиент.Теперь он хочет видеть метки электронной почты как «E-mail *» и «Confirm e-mail *» (звездочки, поскольку они необходимы).Если я отрисовываю повторяющиеся элементы с помощью form_row (), ошибки больше не отображаются в форме (но у меня есть контроль над метками, оснастка).Единственный способ отображения ошибок (не спрашивайте меня, почему) - это использование form_widget (form.giver.email), который указывает на весь объект повторяющегося элемента.Проблема в том, что использование form_widget для рендеринга всего повторяющегося элемента не дает мне контроля над метками.

Рендеринг всего повторяющегося элемента приводит к печати меток с использованием параметров «first_name» и «second_name».Я не могу поставить заглавные буквы, ни тире, ни звезды в этих параметрах по понятным причинам.Если я пытаюсь установить метку в массиве параметров, эта метка передается в оба поля, как описано в документе Symfony2 ...

Я пытался печатать, используя ".first" и ".second" в ветке, но я получаю сообщение об ошибке, утверждающее, что они не существуют в FormView.

Теперь все, что я хочу, - это возможность устанавливать две метки отдельно!Вот мой текущий код:

$builder->add('email', 'repeated', array(
        'type' => 'email',
        'first_name' => 'email',
        'second_name' => 'confirm',
        'invalid_message' => 'The e-mails you provided did not match.',
        'error_bubbling' => false
    ));

Это печатает метки как «электронная почта» и «подтвердить».Здесь используется массив «options»:

$builder->add('email', 'repeated', array(
        'type' => 'email',
        'first_name' => 'email',
        'second_name' => 'confirm',
        'invalid_message' => 'The e-mails you provided did not match.',
        'error_bubbling' => false,
        'options' => array(
            'label' => "TESTTT"
        ),
    ));

Это выведет метку «TESTTT» в оба повторяющихся поля.Что я могу с этим поделать?Как упоминалось выше, использование form_row () не отображает ошибки при отправке формы, если электронные письма не совпадают или если они пустые.Поэтому я вынужден использовать form_widget () и отображать весь повторяющийся объект.

Заранее спасибо за ваше время.

Ответы [ 7 ]

11 голосов
/ 18 мая 2012

Есть более простой и правильный способ:

->add('plainPassword', 'repeated', array(
    'type' => 'password',
    'invalid_message' => "some.error.message",
    'first_name' => 'somecoorectname', // (optional). 'first' value by default. 
    'first_options' => array(
        'label' => 'label.for.future.translate' // Custom label for element 
    )
    /*
       The same way for Second field
     */
))

Наслаждайтесь!

6 голосов
/ 22 января 2012
{{ form_label(form.password.confirmpassword, 'Confirm Password') }}
5 голосов
/ 24 января 2012

Использование

$formView->getChild('passwordFieldName')->getChild('second')->set('label', 'Enter password again');
4 голосов
/ 14 июня 2012

Следующий пример работал для меня.

  • Здесь объявление типа:

    $builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
            array('type' => 'password'));
    
  • А здесь «веточку» используют

    {{ form_errors(form.password.first) }}
    {{ form_widget(form.password.first) }}
    {{ form_label(form.password.first, 'Password') }}
    
    {{ form_errors(form.password.second) }}
    {{ form_widget(form.password.second) }}
    {{ form_label(form.password.second, 'Confirm password') }}
    
2 голосов
/ 09 мая 2012
$builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
             array('type' => 'password', 
                'first_name'=>'Password', 
                'second_name' =>'Confirm password'));

неверно, лучше попробуйте

$builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
             array('type' => 'password', 
                'first_name'=>'first', 
                'second_name' =>'second'));

и вы сможете использовать:

{{ form_errors(form.password.first) }}
{{ form_widget(form.password.first) }}
{{ form_label(form.password.first) }}

{{ form_errors(form.password.second) }}
{{ form_widget(form.password.second) }}
{{ form_label(form.password.second) }}
0 голосов
/ 04 апреля 2012

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

$builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated');

даст вам «первый» и «второй» пароли, которые можно вызывать в соответствии с:

{{ form_errors(form.password.first) }}
{{ form_widget(form.password.first) }}
{{ form_label(form.password.first) }}

{{ form_errors(form.password.second) }}
{{ form_widget(form.password.second) }}
{{ form_label(form.password.second) }}

Но это:

$builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
             array('type' => 'password', 
                'first_name'=>'Password', 
                'second_name' =>'Confirm password'));

НЕ БУДЕТ !!!

0 голосов
/ 04 ноября 2011

Попробуйте добавить имя поля и метку в файл переводов? Например. CraueFormFlowBundle.en.yml

...