Symfony2 создает повторяющиеся элементы пользовательских ярлыков

Я использую Symfony2 и CraueFormFlowBundle, чтобы создать многоэтапную форму. Все идет хорошо, за исключением моего повторного поля электронной почты. Я не могу, ради меня, найти, как поставить метки, которые я хочу. Я представляю форму самостоятельно в представлении Twig, используя form_widget (...) и записывая метки. Я размещаю все, что хочет мой клиент. Теперь он хочет видеть этикетки электронной почты как "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
    ));

Отпечатывает этикетки как "email" и "confirm". Здесь используется массив "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() и рендеринг всего повторяющегося объекта.

Заранее благодарим за ваше время.

Ответ 1

Используйте

$formView->getChild('passwordFieldName')->getChild('second')->set('label', 'Enter password again');

Ответ 2

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

->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
     */
))

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

Ответ 3

{{ form_label(form.password.confirmpassword, 'Confirm Password') }}

Ответ 4

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

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

    $builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
            array('type' => 'password'));
    
  • И здесь "twig" использует

    {{ 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') }}
    

Ответ 5

$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) }}

Ответ 6

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

Ответ 7

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

$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'));

НЕ БУДУ!!!