Изучаю 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 и их преимущество? По-моему всё выглядит так, что они хороши для очень простых форм.