Как в форме вывести список select из базы данных в symfony?

Пользователь

от rebekah , в категории: PHP , 2 года назад

Как в форме вывести список select из базы данных в symfony?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от lilla.herman , 2 года назад

@rebekah 

Чтобы вывести список select из базы данных в Symfony, вам нужно выполнить следующие шаги:

  1. Создайте форму Symfony с использованием FormBuilder. Например, вы можете создать форму TaskType:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// src/Form/TaskType.php

namespace AppForm;

use AppEntityTask;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyBridgeDoctrineFormTypeEntityType;

class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('description')
            ->add('category', EntityType::class, [
                'class' => 'AppEntityCategory',
                'choice_label' => 'name',
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Task::class,
        ]);
    }
}


Здесь мы добавляем EntityType для поля category, которое связано с сущностью Category.

  1. В контроллере создайте экшен, который будет отображать форму:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// src/Controller/TaskController.php

namespace AppController;

use AppEntityTask;
use AppFormTaskType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;

class TaskController extends AbstractController
{
    /**
     * @Route("/task/new", name="task_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $task = new Task();
        $form = $this->createForm(TaskType::class, $task);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($task);
            $entityManager->flush();

            return $this->redirectToRoute('task_index');
        }

        return $this->render('task/new.html.twig', [
            'task' => $task,
            'form' => $form->createView(),
        ]);
    }
}


  1. В шаблоне Twig отображайте форму:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{# templates/task/new.html.twig #}

{% extends 'base.html.twig' %}

{% block body %}
    <h1>Create new task</h1>

    {{ form_start(form) }}
        {{ form_widget(form) }}
        <button type="submit" class="btn btn-primary">Create</button>
    {{ form_end(form) }}
{% endblock %}


Теперь при открытии страницы по адресу /task/new будет отображаться форма для создания новой задачи, в которой поле category будет представлено в виде выпадающего списка, заполненного данными из базы данных.