@rebekah
Чтобы вывести список select
из базы данных в Symfony, вам нужно выполнить следующие шаги:
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 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 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
будет представлено в виде выпадающего списка, заполненного данными из базы данных.