Циклические ссылки в формах Symfony

#symfony #symfony4 #symfony-forms

#symfony #symfony4 #symfony-forms

Вопрос:

В настоящее время я создаю API Symfony 4.4, который способен добавлять объекты в базу данных. Поскольку я считаю, что мою проблему можно объяснить и решить, используя только теорию, я не буду добавлять сюда свой фактический код, но предоставлю более концептуальное описание.

У меня есть класс сущности с именем Person . Этот класс имеет соответствующую форму, называемую PersonType . У человека может быть пользователь и сотрудник, связанные с ним. У них также есть свои сущности и формы.

У пользователя есть вызываемое поле createdBy , которое ссылается на другого пользователя, и у сотрудника должен быть человек, связанный с ним.

Моя проблема в том, что когда я пытаюсь исправить пользователя, используя обычный способ ( createForm() и Doctrine, как здесь ), я получаю переполнение памяти createForm() . Когда я удаляю ссылки на UserType и EmployeeType из PersonType , переполнения памяти не происходит. Мой объем памяти составляет 1 ГБ, и я считаю, что его увеличение не решит проблему.

Есть ли способ ограничить количество циклических ссылок или, например, предотвратить отображение персоны сотрудника персоны.

Комментарии:

1. Вам действительно нужно предоставлять createdBy доступ к форме? Разве вы не можете установить его из контроллера при создании?

2. @msg это хорошая идея, спасибо! Я полагаю, в этом нет необходимости. Однако, даже если я удалю только поле user и оставлю в поле employee, я все равно получу переполнение памяти.

3. Я думаю, вам может понадобиться копнуть немного глубже. Если у вас не происходит какой-то активной загрузки, то нет внутренней причины, по которой то, что вы описали, должно приводить к циклической ошибке. Вы можете попробовать создать запрос DQL, который извлекает точные необходимые объекты. Это предотвратит любую отложенную загрузку, которая может вас испортить.

4. Может помочь отображение ваших типов форм, используете ли вы только PersonType с дополнительными PersonType встроенными?

5. @ArleighHix У меня нет PersonType встроенного PersonType , хотя у меня есть EmployeeType встроенные PersonType и EmployeeType встроенные PersonType (поскольку я также хотел бы иметь возможность редактировать person, используя его employee — в некоторых моментах мне нужен в основном employee, а в других — в основном person).