Использование типа формы для редактирования объекта

Я пытаюсь использовать тип формы для редактирования одного из моих объектов. Formtype работает безупречно при создании новых объектов, но когда я пытаюсь загрузить существующий объект в форму, я получаю следующее исключение:

Сущность типа «Proxies__CG __ \ App \ Entity \ Language», переданная в поле выбора, должна управляться. Может, вы забыли сохранить это в диспетчере сущностей?

Объект, который помещается в форму, загружается из базы данных, поэтому он уже на 100% сохраняется.

Вот типы:

UnitType

class UnitType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('unitTranslations', CollectionType::class, [
                'entry_type' => UnitTranslationType::class,
                'entry_options' => array('label' => false),
                'allow_add'    => true,
                'allow_delete' => true,
                'prototype'    => true,
                'by_reference' => false,
                'delete_empty' => true,
                'attr' => [
                    'class' => 'UnitTranslationSelector',
                ],
            ])
            ->add('save', SubmitType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Unit::class
        ));
    }
}

UnitTranslationType

class UnitTranslationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add('name', TextType::class, [
                'label' => 'Unit',
                'by_reference' => false
            ])
            ->add('language', EntityType::class, [
                'class' => Language::class,
                'choice_label' => 'name',
                'placeholder' => 'Choose an option',
                'by_reference' => false
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => UnitTranslation::class,
        ));
    }
}

и контроллер:

public function createUnit(Request $request, EntityManagerInterface $entityManager)
    {
        $unit = new Unit();

        $unit = $entityManager->getRepository(Unit::class)->find(2);
        dump($unit);

        $form = $this->createForm(UnitType::class, $unit);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {

            foreach ($unit->getUnitTranslations() as $translation) {
                $translation->setUnit($unit);
            }

            $entityManager->persist($unit);
            $entityManager->flush();

            return $this->redirectToRoute("recipe_list");
        }
        return $this->render('createUnit.html.twig', array('form' => $form->createView()));

    }

Это всего лишь предположение, но является ли свойство Unit :: unitTranslations общедоступным?

Cerad 08.06.2018 19:24

@Cerad нет, собственность частная

Prokyon 08.06.2018 20:55

Печалька. Итак, почему в вашем языке EntityType есть атрибут by_reference?

Cerad 08.06.2018 21:13

честно говоря, я не знаю, почему этот атрибут был там, но проблема в by_reference, когда я удаляю его, поэтому по умолчанию установлено значение true, загрузка работает без каких-либо проблем. Большое спасибо!

Prokyon 08.06.2018 21:41

Рад, что он работает. Всегда наслаждайтесь решениями, когда ни помощник, ни помощник не понимают, почему это работает.

Cerad 08.06.2018 21:46

да, это действительно странно, но пока он работает, я счастлив :) Вы хотите дать ответ, чтобы я мог его принять?

Prokyon 08.06.2018 21:49

Неа. Может быть, кто-нибудь еще подойдет и предоставит реальное объяснение.

Cerad 08.06.2018 22:01

Я думаю, проблема была в методе Unit :: addUnitTranslation (). Поскольку 'by_reference' => false, вызовет эту функцию

hanish singla 09.06.2018 15:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
8
262
1

Ответы 1

Я знаю, что этот вопрос старый, но я просто решил ту же проблему, используя CollectionType вместо EntityType (для языковой сущности в вашем случае). Я не уверен, как настроены ваши сущности, но для CollectionType потребуется связь OneToMany или ManyToMany между сущностью UnitTranslation и сущностью Language. Описание для CollectionType можно найти здесь, а как встроить коллекцию форм можно найти там.

Другие вопросы по теме