1

我正在使用FOSUserBundle,我想在注册表单中添加一些 HTML 元素。实际上,我做到了,我可以在我的表单中看到添加到 User 类的属性。问题是我希望这些字段(名字、姓氏、出生日期等)能够获得我的 CSS 模板(引导程序)的外观。我通过覆盖登录页面成功地做到了这一点,因为 HTML 是显式声明的。我想对注册页面做同样的事情,但是我觉得很困惑,因为这里的内容是:

  • register.html.twig

    {% 扩展“FOSUserBundle::layout.html.twig”%}

    {% block fos_user_content %} {% include "FOSUserBundle:Registration:register_content.html.twig" %} {% endblock fos_user_content %}

  • register_content.html.twig

    {% trans_default_domain 'FOSUserBundle' %}

    {{ form_widget(form) }}

如何通过此代码访问我在页面中看到的元素?

4

4 回答 4

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>

这个对我有用。

于 2013-09-03T13:58:12.567 回答
2

replace form_widget(form) with something like:

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

in your custom RegistrationFormType class, you could add a class to the username field with:

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

also see form docs on rendering fields by hand: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

于 2013-04-20T01:17:39.560 回答
2

请在此处查看官方文档:“覆盖表单”。您将需要创建一个自定义注册表单类型类,将其声明为服务,并告诉 FOSUserBundle 使用它。

要自定义模板,请参阅“覆盖模板”。在您的情况下,您可以创建app/Resources/FOSUserBundle/views/Registration/register.html.twig.

于 2013-04-19T18:52:49.630 回答
2

以下是我使用 FOSUserBundle、PUGXMultiUserBundle 和 BraincraftedBoostrapBundle 解决此问题的方法:

根据 FOSUserBundle 文档,将 UserBundle 添加为 FOSUser 的子项。创建一个RegistrationFormType包含以下内容的自定义,其中仅添加attrlabel_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('') }}
于 2014-07-26T13:09:50.507 回答