显示复选框的自定义消息(服务条款/隐私)

时间:2017-04-16 17:37:40

标签: php symfony checkbox

我还是Symfony和Php的新手,所以我使用的是Symfony docs的CheckboxType代码。

目前,如果用户尝试注册并且取消选中该复选框,则不会显示任何消息,但仍会阻止用户创建帐户。

(1)我想在红色复选框旁边显示一条错误消息,说明必须检查该框才能继续。我也想自定义此消息。

谢谢!

Register.html

  {% extends 'base.html.twig' %}

{% block body %}
    <div class="container">
        <div class="row">
            <div class="col-xs-12">
                <h1>Register!</h1>

                {{ form_start(form) }}
                {{ form_row(form.username) }}
                {{ form_row(form.email) }}
                {{ form_row(form.plainPassword.first, {
                    'label': 'Password'
                }) }}
                {{ form_row(form.plainPassword.second, {
                    'label': 'Repeat Password'
                }) }}
                <a href="https://termsfeed.com/terms-service">Terms of service</a>
                {{ form_widget(form.termsAccepted) }}

                <a href="http://t5Project/web/">cancel</a>

                <button type="submit" class="btn btn-primary" formnovalidate>
                    Register
                </button>

                <br></br>

                <p><a href="https://termsfeed.com/privacy">Privacy Policy</a>


                {{ form_end(form) }}
            </div>
        </div>
    </div>
{% endblock %}

RegistrationForm.php

  class UserRegistrationForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('email', EmailType::class)
            ->add('username', TextType::class)
            ->add('plainPassword', RepeatedType::class, ['type' => PasswordType::class])
            ->add('termsAccepted', CheckboxType::class, array(
        'mapped' => false,
        'constraints' => new IsTrue(),));


    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
            'validation_groups' => ['Default', 'Registration']
        ]);
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于你正在使用:

{{ form_widget(form.termsAccepted) }}

用于呈现复选框。这只会渲染小部件,而:

{{ form_row(form.termsAccepted) }}
所有用户字段使用的

将包含标签,窗口小部件和错误消息。如果您想保留小部件,例如因为使用form_row会以某种方式弄乱模板,您可以使用以下方式单独渲染错误:

{{ form_errors(form.termsAccepted) }}

您可能还想查看Form Customization上的文档。