2013-04-19 3 views
1

Я использую FOSUserBundle, и я хочу добавить несколько элементов HTML в регистрационную форму. Фактически, я сделал, и я могу видеть добавленные свойства к классу User в моей форме. Проблема в том, что я хочу, чтобы эти поля (имя, фамилия, дата рождения и т. Д.) Получили вид моего шаблона CSS (бутстрап). Мне удалось сделать это для страницы входа, переопределив ее, так как HTML явно объявлен. Я хочу сделать то же самое для страницы регистра, однако, кажется, путают со мной, потому что вот содержание:FOSUserBundle: переопределение шаблона Twig: добавление элементов HTML

  • register.html.twig

    {% распространяется «FOSUserBundle :: раскладку .html.twig»%}

    {% блок fos_user_content%} {% включают в себя "FOSUserBundle: Регистрация: register_content.html.twig" %} {% fos_user_content% концевым блоком}

  • register_content.html.twig

    {% trans_default_domain% 'FOSUserBundle'}

    {{form_widget (форма)}}

Как получить доступ к элементам что я вижу на странице из этого кода?

+1

downvoted, потому что ваш вопрос был на самом деле: «как установить класс на метку поля повторного пароля в symfony2? " –

ответ

8

Попробуйте следующее

<div class="form-group {% if form.plainPassword.first.vars.errors %}has-error{% endif %}"> 
    <label class="col-lg-2 control-label">Password:</label> 
    <div class="col-lg-5"> 
    {{ form_widget(form.plainPassword.first, {'attr': {'class': 'form-control input-lg', 'placeholder': 'Enter password', 'required': 'required'}}) }} 
    {% for errorItem in form.plainPassword.first.vars.errors %} 
     <label class="control-label has-error" for="{{ form.plainPassword.vars.id }}">{{ errorItem.message }}</label> 
    {% endfor %} 
    </div> 
    <div class="col-lg-5"> 
    {{ form_widget(form.plainPassword.second, {'attr': {'class': 'form-control input-lg', 'placeholder': 'Enter password again', 'required': 'required'}}) }} 
    </div> 
</div> 

Это работает для меня.

2

См. Официальную документацию здесь: «Overriding Forms». Вам нужно будет создать класс типа пользовательской формы регистрации, объявить его как услугу и сообщить FOSUserBundle о его использовании.

Чтобы настроить шаблон, см. "Overriding Templates". В вашем случае вы можете создать app/Resources/FOSUserBundle/views/Registration/register.html.twig.

+0

Это именно то, что я сделал, и, как я уже сказал, я вижу свою новую форму с новыми свойствами, которые я добавил. Но я хочу получить доступ к HTML-коду, чтобы изменить свойства CSS. Добавление классов для элементов HTML и т. Д. – Sherlock

+0

обновленный ответ в ответ. –

+0

Дилан, возможно, вы не читали, что я сказал. Я использую FOSUserBundle, и я переопределил регистрационную форму defualt. Взгляните на приведенный выше код. Форма возвращается методом 'form_widget (form)'. Нет HTML-узлов, поэтому я могу применить к ним CSS. – Sherlock

2

заменить form_widget(form) что-то вроде:

form_widget(form.username) 
form_widget(form.email) 
form_widget(form.plainPassword) 
form_widget(form.myField) 
form_rest(form) 

в своем классе пользовательских RegistrationFormType, вы можете добавить класс в поле имени пользователя с:

$builder 
     ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle', 'attr' => array('class'=>'myClass'))) 

также увидеть форму документы на оказание полей вручную : http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

+0

Я сделал это, но у меня все еще есть проблема с полем пароля. Вот его код: '-> add ('plainPassword', 'repeat', array ( 'type' => 'password', 'options' => array ('translation_domain' => 'FOSUserBundle'), ' first_options '=> array (' label '=>' form.password '), ' second_options '=> array (' label '=>' form.password_confirmation '), ' invalid_message '=>' fos_user.password.mismatch ', \t //' attr '\t => array (' class '=>' label label-info ') )); ' Я хочу добавить класс для обоих полей пароля – Sherlock

+0

Но когда я добавляю класс, он не работает, потому что класс предназначен только для меток. Кроме того, plainPassword является повторным полем здесь. Итак, как вы думаете, что я могу сделать, чтобы решить это? – Sherlock

+0

Проще всего сделать, чтобы скопировать html, сгенерированный '' form_widget (form.plainPassword) '', вставить в шаблон формы, отредактировать по желанию вашего сердца и удалить '' form_widget (form.plainPassword) ''. –

2

Вот как я обратился к этой проблеме с помощью FOSUserBundle, PUGXMultiUserBundle & BraincraftedBoostrapBundle:

Per FOSUserBundle документации, добавьте UserBundle как ребенок FOSUser.Создание пользовательского RegistrationFormType который включает в себя следующие, где добавляются только attr и label_attr массивы:

$builder 
     ->add('email', 'email', array(
      'label' => 'form.email', 
      'translation_domain' => 'FOSUserBundle', 
      'attr' => array(
       'placeholder' => 'E-mail', 
      ), 
      'label_attr' => array(
       'class' => 'sr-only', 
    ))) 
     ->add('username', null, array(
      'label' => 'form.username', 
      'translation_domain' => 'FOSUserBundle', 
      'attr' => array(
       'placeholder' => 'Username', 
      ), 
      'label_attr' => array(
       'class' => 'sr-only', 
    ))) 
     ->add('plainPassword', 'repeated', array(
      'type' => 'password', 
      'options' => array('translation_domain' => 'FOSUserBundle'), 
      'first_options' => array('label' => 'form.password', 
       'attr' => array(
        'placeholder' => 'Password', 
       ), 
       'label_attr' => array(
        'class' => 'sr-only', 
       )), 
      'second_options' => array('label' => 'form.password_confirmation', 
       'attr' => array(
        'placeholder' => 'Confirm password', 
       ), 
       'label_attr' => array(
        'class' => 'sr-only', 
       )), 
      'invalid_message' => 'fos_user.password.mismatch', 
     )) 
; 

шаблон формы регистрации, то выглядит следующим образом:

<form action="{{ path('volunteer_registration') }}" method="POST" class="form-inline"> 
    {{ bootstrap_set_style('form-inline') }} 
    {{ form_row(form.firstName) }} 
    {{ form_row(form.lastName) }} 
    {{ form_row(form.username) }} 
    {{ form_row(form.email) }} 
    <br/> 
    {{ form_row(form.plainPassword) }} 
    {{ form_row(form.plainPassword.second) }} 
    {{ bootstrap_set_style('') }} 
Смежные вопросы