我的表单中有两个EntityType
字段,并且都为其分配了NotBlank
个约束。
现在,我遇到这样一个问题:NotBlank
约束不仅适用于设置了multiple => true
的一个字段。
$builder
->add('preferredCountries', EntityType::class, array(
'required' => false,
'class' => 'IndexBundle:Country',
'property' => 'name',
'empty_value' => 'Choose',
'multiple' => true,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->where('c.name != :name')
->orderBy('c.name', 'ASC')
->setParameter('name', 'Other');
},
'constraints' => array(
new NotBlank(array(
'message' => 'blank!!!',
)),
)
))
->add('internshipProgram', EntityType::class, array(
'required' => false,
'class' => 'IndexBundle:InternshipProgram',
'property' => 'name',
'empty_value' => 'Choose',
'constraints' => array(
new NotBlank(array(
'message' => 'blank!!!',
)),
)
))
在这种情况下,当我提交空值时,字段internshipProgram
会收到错误,而prefferedCountries
则没有。
表格显示:
<div class="form-group col-xs-12">
{{ form_label(current_internship_form.preferredCountries, 'Preferred countries', { 'label_attr': {'class': 'label-text'} }) }}
{{ form_widget(current_internship_form.preferredCountries) }}
<span class="error text-danger small">{{ form_errors(current_internship_form.preferredCountries) }}</span>
</div>
<div class="form-group col-xs-12">
{{ form_label(current_internship_form.internshipProgram, 'What type of training agreement will you have?', { 'label_attr': {'class': 'label-text'} }) }}
{{ form_widget(current_internship_form.internshipProgram, { 'id': 'internship_program', 'attr': {'class': 'form-control '}}) }}
<span class="error text-danger small">{{ form_errors(current_internship_form.internshipProgram) }}</span>
</div>
我的代码中是否存在错误,或者它与多项选择选择有何关联?有没有人有类似的问题,知道如何解决它?
答案 0 :(得分:5)
NotBlank
设置为EntityType
时,multiple
不能使用true
约束。因为数组永远不会为null。您应该尝试使用count
约束,如下所示:
$builder
->add('preferredCountries', EntityType::class, array(
'required' => false,
'class' => 'IndexBundle:Country',
'property' => 'name',
'empty_value' => 'Choose',
'multiple' => true,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->where('c.name != :name')
->orderBy('c.name', 'ASC')
->setParameter('name', 'Other');
},
'constraints' => array(
new Count(array(
'min' => 1,
'minMessage' => "Should not be blank"
))
)
))
...
答案 1 :(得分:0)
NotNull约束意味着值不能为null - &gt; multiple = true表示值将存储在数组中 - &gt;空数组不为空。
改为使用NotBlank约束。它完全是为了这个目的。
答案 2 :(得分:-1)
您还可以在实体级别指定
/**
* @Count(min = 1, minMessage = "At least one branch must be selected")
*/
protected $multiCheckBox;