Я решил проблему следующим образом:
1) Определил форму как сервис и в качетсве аргумента передал EntityManagerInterface
2) вместо EntityType использовал ChoiceType и вынес запрос в отдельный метод
В итоге получилось так
$builder
->add('citySelector', ChoiceType::class, [
'choices' => array_flip($this->getCitiesArray()),
'expanded' => false,
'multiple' => false,
'attr' => [
'class' => 'form-control'
],
'label' => 'warehouse_filter_form.city',
'placeholder' => 'warehouse_filter_form.any',
'required' => false,
])
И метод `getCitiesArray`
private function getCitiesArray()
{
$cities = [];
$results = $this->em->createQueryBuilder()
->select('l.addressCity')
->from(Location::class, 'l')
->groupBy('l.addressCity')
->orderBy('l.addressCity', 'ASC')
->getQuery()
->getArrayResult();
foreach ($results as $result) {
if (!in_array($result['addressCity'], $cities)) {
$cities[$result['addressCity']] = $result['addressCity'];
}
}
return $cities;
}