в моем проекте Symfony 4, в моей форме, я хотел бы использовать сервис для завершения выбора. Итак, я сделал это:
Форма
public function buildForm(FormBuilderInterface $builder, array $options, GroupeValidateursService $groupeValidateursService)
{
// $groupeValidateursService = $options['groupeValidateursService'];
$builder
->add('defaultGroupeValidateurs', EntityType::class, [
'class' => GroupeValidateurs::class,
'label' => "Service par défaut",
'placeholder' => "Sélectionnez un service",
'query_builder' => function () use ($groupeValidateursService) {
return $groupeValidateursService->getNotDefaultGroups();
},
'choice_label' => 'nom',
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ParametresAdmin::class,
'groupeValidateursService' => GroupeValidateursService::class,
]);
}
Контроллер:
$formDeleteDefaultGroupe = $this->createForm(DeleteDefaultGroupeType::class, $parametresAdmin, [
"groupeValidateursService" => $this->groupeValidateursService,
]);
Если я сделаю дампумри в моей сервисной функции, все в порядке, у меня есть массив объектов, как в запросе к хранилищу.
Но у меня есть эта ошибка:
Ожидаемый аргумент типа "Doctrine \ ORM \ QueryBuilder "," массив "задан
Я думаю, что возникает проблема при возврате массива из службы функций:
/**
* Retourne tous les groupes sauf celui par défaut
*
* @return array
*/
public function getNotDefaultGroups()
{
$groupes = $this->repoGroupeValidateurs->findAll();
$default = $this->getDefaultGroupe();
$otherGroups = [];
foreach ($groupes as $groupe) {
if ($groupe != $default) {
$otherGroups[] = $groupe;
}
}
return $otherGroups;
}
Так что яне понимаю, что не так
РЕДАКТИРОВАТЬ: я пытался так:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('defaultGroupeValidateurs', ChoiceType::class, [
'label' => "Service par défaut",
'placeholder' => "Sélectionnez un service",
'choices' => $options['groupeValidateursService']->getNotDefaultGroups(),
'choice_label' => function ($choice, $key, $value) {
return $value->getNom();
}
]);
}
Но у меня есть эта ошибка:
Вызов функции-члена getNom() для строки
Итак, я заменил $ value-> getNom () на $ choice-> getNom ().
Но теперь у меня есть эта ошибка:
Argument 1 passed to Symfony\Component\Form\FormRenderer::renderBlock() must be an instance of Symfony\Component\Form\FormView, string given
$formDeleteDefaultGroupe = $this->createForm(DeleteDefaultGroupeType::class, $parametresAdmin, [
"groupeValidateursService" => $this->groupeValidateursService
]);
$formDeleteDefaultGroupe->handleRequest($request);