Нужно ли использовать Symfony forms?

Изучаю Symfony Forms. В теории все звучит красиво и просто. Однако в реальности проблемы возникают с формой уже с тремя полями, если одно поле зависит от другого. Например, есть сущности Город - Район - Метро:

class City
{
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\District", mappedBy="city")
     */
    private $districts;
}


class District
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\City", inversedBy="districts")
     * @ORM\JoinColumn(nullable=false)
     */
    private $city;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\MetroStation", mappedBy="district")
     */
    private $metroStations;
}


class MetroStation
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\District", inversedBy="metroStations")
     * @ORM\JoinColumn(nullable=false)
     */
    private $district;
}


Очевидно, что, несмотря на то, что Метро имеет привязку только к району, в форме добавления/изменения метро я хочу иметь возможность выбрать сначала Город, потом один из Районов этого города.

Абсолютно стандартная задача, однако найденные мною туториалы по теме "dependent fields" предлагают использовать Form events для того, чтобы при редактировании формы получить необходимые данные. Зачем? Если необходимые данные можно получить прямо в методе buildForm()?

Кроме того, Symfony Forms в данной ситуации никак не избавляют от необходимости вручную реализовывать ajax-запросы для получение списка Районов при выборе Города.

На мой взгляд подход, который применяется в Laravel, когда каждой операции с сущностью (список, форма просмотра, форма редактирования, новая запись, обработчики добавления, изменения и удалению) соответствует свой метод в контроллере, гораздо более прозрачен и понятен.

Объясните, пожалуйста, в чем "фишка" Symfony Forms и их преимущество? По-моему всё выглядит так, что они хороши для очень простых форм.
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 2
Обычно работает так:

1) Фронт - это отдельное какое-то js-фреймворк, который отдает Rest запрос

2) Контроллер на уровне DTO с помощью ParamConverter и Валидаций принимает значения, либо дает отбивку фронту.

3) Значение уходит в сервис, где идет какая-то логика и возвращается ответ через какой-то json=нормалайзер.

___

P.s. привыкай к тому, что в больших проектах на Symfony вообще не юзается вот это все:

* @ORM\ManyToOne(targetEntity="App\Entity\City", inversedBy="districts")
* @ORM\JoinColumn(nullable=false)

Доктриновские связи работают не всегда адекватно и быстро, поэтому обычно делают составной ключ на 2-3 колонки и зависимости вытягиваются из репозиторией отдельным запросом.
Ответ написан
OnYourLips
@OnYourLips
В проектах на symfony оно не нужно: фронетнд обычно выделяют в отдельные приложения, а объекты запроса создаются еще до действий контроллера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы