我还是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']
]);
}
}
答案 0 :(得分:1)
问题在于你正在使用:
{{ form_widget(form.termsAccepted) }}
用于呈现复选框。这只会渲染小部件,而:
{{ form_row(form.termsAccepted) }}
所有用户字段使用的将包含标签,窗口小部件和错误消息。如果您想保留小部件,例如因为使用form_row
会以某种方式弄乱模板,您可以使用以下方式单独渲染错误:
{{ form_errors(form.termsAccepted) }}
您可能还想查看Form Customization上的文档。