Для создания формы checkbox из массива объектов в Symfony вы можете использовать класс CheckboxType
в сочетании с ChoiceType
. Давайте разберемся, как это сделать.
1. Ваш первый шаг - создать форму для отображения checkbox. Для этого в Symfony вы можете создать форму с помощью класса FormBuilderInterface
или использовать аннотации в вашем классе сущности.
use SymfonyComponentFormExtensionCoreTypeCheckboxType; use SymfonyComponentFormExtensionCoreTypeChoiceType; use SymfonyComponentFormFormBuilderInterface; // ... public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('choices', ChoiceType::class, [ 'choices' => $options['choices'], 'expanded' => true, 'multiple' => true, 'choice_label' => function ($choice) { // Возвращаем то, что вы хотите отобразить для каждого checkbox return $choice->getName(); }, ]); }
Здесь мы используем ChoiceType
с опцией expanded
в значении true
, чтобы отобразить checkbox вместо выпадающего списка. Также мы используем multiple
в значении true
, чтобы пользователь мог выбрать несколько вариантов. Опция choices
позволяет указать массив объектов для отображения в форме.
2. Поскольку нам нужно передать массив объектов в форму, мы должны создать контроллер, который создаст экземпляр формы и преобразует объекты в массив формы.
use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAnnotationRoute; // ... /** * @Route("/form", name="form") */ public function form(Request $request): Response { $choices = $this->getDoctrine()->getRepository(YourEntity::class)->findAll(); $form = $this->createForm(YourFormType::class, [], [ 'choices' => $choices, ]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // Обработка данных формы // ... } return $this->render('your_template.html.twig', [ 'form' => $form->createView(), ]); }
Здесь мы используем getRepository
для получения массива объектов, которые мы хотим отобразить в форме checkbox. Затем мы создаем экземпляр формы с помощью createForm
, передавая ему класс формы (YourFormType
), пустой массив для значений полей формы и массив объектов в качестве параметра choices
.
3. Наконец, разместите форму checkbox на вашем шаблоне Twig.
{# your_template.html.twig #} <form action="{{ path('form') }}" method="POST"> {{ form_row(form.choices) }} <button type="submit">Submit</button> </form>
Здесь мы используем form_row
для отображения поля формы checkbox.
Теперь у вас должна быть рабочая форма checkbox, отображающая значения из массива объектов. При отправке формы данные будут обработаны в соответствии с вашим контроллером.