2016-12-12 5 views
0

私のフォームに2つのEntityTypeフィールドがあり、どちらもNotBlankという制約が割り当てられています。Symfony2 - EntityTypeでNotBlank制約が機能しない

ここでは、NotBlankの制約がmultiple => trueがオンになっている1つのフィールドでのみ機能しているという問題があります。この場合

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

私のコードに誤りがありますか、それは何らかの形で複数の選択肢の選択に関連していますか?誰も似たような問題を抱えていて、解決方法を知っていますか?

答えて

3

EntityTypemultipletrueに設定すると、NotBlankの制約を使用できません。配列が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" 
       )) 
      ) 
    )) 
... 
+0

うわー問題を解決しています。ありがとうございました! –

0

NotNull制約は、値がnullでないことを意味します。 - > multiple = trueは、値が配列に格納されることを意味します。 - >空の配列はnullではありません。

代わりにNotBlank制約を使用してください。この目的のために作られています。

+0

ああ申し訳ありませんが、今、私はあなたが既に使用しているNotBlank制約を...あなたのコード内で参照 –

関連する問題