FOSUserBundle:覆盖树枝模板:添加HTML元素(FOSUserBundle : Over

2019-08-31 14:34发布

我使用FOSUserBundle,我想一些HTML元素添加到登记表。 其实,我做了,我可以看到我的形式添加的属性到User类。 问题是,我想这些领域(姓氏,名字,出生日期,等..),让我的CSS模板(引导)的外观和感觉 。 我成功通过重写它这样做的登录页面,因为HTML明确声明。 我想为注册页面做的一样,但它似乎混淆我的,因为这里的内容:

  • register.html.twig

    {%伸出 “FOSUserBundle :: layout.html.twig” %}

    {%块fos_user_content%} {%包括 “FOSUserBundle:注册:register_content.html.twig” %} {%末端嵌段fos_user_content%}

  • register_content.html.twig

    {%trans_default_domain 'FOSUserBundle' %}

    {{form_widget(形式)}}

我怎样才能访问我页面看到这个代码的元素?

Answer 1:

试试这个

<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>

这个对我有用。



Answer 2:

请在这里看到的官方文档:“ 重写表单 ”。 您需要创建一个自定义登记表类型的类,声明它作为一种服务,并告诉FOSUserBundle使用它。

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



Answer 3:

更换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



Answer 4:

这是我如何解决使用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('') }}


文章来源: FOSUserBundle : Overriding a Twig template : adding HTML elements