Для создания формы опроса с типом выбора (ChoiceType) в Symfony вы должны выполнить несколько шагов.
1. Создайте сущность для представления опроса. Это можно сделать с помощью команды Symfony Console:
php bin/console make:entity Survey
Вы будете задавать вопросы опроса в качестве свойств этой сущности.
2. Задайте свойства опроса (например, question
, options
, answer
). Они будут определять вопросы, варианты ответов и выбранный ответ в опросе.
3. Определите форму для сущности опроса. Для этого можно использовать класс формы Symfony:
// src/Form/SurveyType.php namespace AppForm; use AppEntitySurvey; use SymfonyComponentFormAbstractType; use SymfonyComponentFormExtensionCoreTypeChoiceType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolver; class SurveyType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('question') ->add('options', ChoiceType::class, [ 'choices' => [ 'Option 1' => 'option1', 'Option 2' => 'option2', 'Option 3' => 'option3', ], 'multiple' => true, 'expanded' => true, ]) ->add('answer'); // Ваш код может отличаться в зависимости от структуры вашей сущности опроса } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Survey::class, ]); } }
Здесь мы используем тип выбора (ChoiceType
), чтобы предоставить пользователю возможность выбрать несколько опций из представленного списка. Флаги multiple
и expanded
установлены как true
, чтобы позволить выбрать несколько опций и представить их в виде флажкового списка.
4. Создайте контроллер, который будет отображать форму опроса и обрабатывать ее:
// src/Controller/SurveyController.php namespace AppController; use AppEntitySurvey; use AppFormSurveyType; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAnnotationRoute; use SymfonyBundleFrameworkBundleControllerAbstractController; class SurveyController extends AbstractController { /** * @Route("/survey/create", name="survey_create") */ public function create(Request $request): Response { $survey = new Survey(); $form = $this->createForm(SurveyType::class, $survey); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // Обработка данных опроса, например, сохранение в базе данных // $entityManager = $this->getDoctrine()->getManager(); // $entityManager->persist($survey); // $entityManager->flush(); return $this->redirectToRoute('survey_success'); } return $this->render('survey/create.html.twig', [ 'form' => $form->createView(), ]); } /** * @Route("/survey/success", name="survey_success") */ public function success(): Response { return $this->render('survey/success.html.twig'); } }
Здесь мы создаем экземпляр опроса и связываем его с формой SurveyType
. В методе create()
обрабатываем отправку формы и сохранение данных. Если форма прошла валидацию, то происходит редирект на страницу success.
5. Создайте шаблон для отображения формы опроса:
{# templates/survey/create.html.twig #} {% extends 'base.html.twig' %} {% block body %} <h1>Create Survey</h1> {{ form_start(form) }} {{ form_widget(form) }} <button type="submit">Submit</button> {{ form_end(form) }} {% endblock %}
Это пример шаблона, который отображает форму опроса. В форме мы используем функции form_start()
, form_widget()
, form_end()
, чтобы отобразить поля формы, кнопку отправки и закрыть форму. Форма имеет тип POST и действие также ссылаются на метод create контроллера SurveyController.
6. Создайте шаблон для страницы успешного создания опроса:
{# templates/survey/success.html.twig #} {% extends 'base.html.twig' %} {% block body %} <h1>Survey Created Successfully</h1> {% endblock %}
Это простой шаблон для отображения страницы успешного создания опроса.
Теперь у вас есть форма опроса с типом выбора (ChoiceType) в Symfony. Вы можете настроить свойства формы опроса, добавить валидацию и дополнительные функции, в зависимости от ваших потребностей.