Symfony встроил форму ChoiceType, обновляющую каждый экземпляр - PullRequest
0 голосов
/ 21 марта 2019

У меня есть форма EditAnnouncementType, которая встроена в форму CollectionType. Встроенная форма имеет две формы ChoiceType, одна из которых корректно обновляет сопоставленную сущность Announcement. Другой, однако, попытается обновить все экземпляры объекта в моей базе данных, что приведет к этой ошибке.

Ошибка типа: Аргумент 1, передаваемый в AppBundle \ Entity \ Announcement :: setType (), должен иметь тип integer, значение NULL, вызывается в / Users / dperezpe / dev / grand-central / 673 / grand-central / vendor /symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php в строке 528

EditAnnouncementType.php Форма type является ошибочной.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('edit', SubmitType::class,
            array
            (
                'label' => 'Save changes',
                'attr' => ['class' => 'btn btn-primary']

            ))

        ->add('type', ChoiceType::class,
            [
                'choices' =>
                    [
                    'info_type' => 1,
                    'star_type' => 2,
                    'alert_type' => 3,
                    'lightbulb_type' => 4,
                    'event_type' => 5,
                    'statement_type' => 6,
                    'cat_type' => 7,
                    'hands_type' => 8
                ],
                'expanded' => true,
                'multiple' => false,
                'required' => true,
                'label_attr' => array(
                    'class' => 'sr-only'
                ),
            ])


          ->add('audience', ChoiceType::class,
              [
                  'choices' =>
                      [
                          'Students: anybody with a student level field populated' => 'students',
                          'Employees: anybody with an employee ID number' => 'employees'
                      ],
                  'expanded' => true,
                  'required' => true,
                  'multiple' => true
                      ])

Тип коллекции

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('announcements', CollectionType::class,
        [
            'entry_type' => EditAnnouncementType::class,
            'entry_options' => ['label' => false],
        ]);
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => AnnouncementManager::class
    ]);
}

Я подозреваю, что это связано с различием в имени HTML, которое было отображено для этого, когда во входных данных типа отсутствует пустой []

<input type="radio" 
id="announcement_edit_collection_announcements_221_type_0" 
name="announcement_edit_collection[announcements][221][type]" 
required="required" value="1">


<input type="checkbox" id="announcement_edit_collection_announcements_221_audience_0"
 name="announcement_edit_collection[announcements][221][audience][]
"value="students">
...