1.Форма(StudentRegistrationType.php)
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\RadioType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Intl\Countries;
class StudentRegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$countries = Countries::getNames();
$builder
->add('first_name', TextType::class)
->add("last_name", TextType::class)
->add('email', EmailType::class)
->add('gender', ChoiceType::class, [
'choices' => [
'Male' => 'male',
'Female' => 'female',
],
//'choice_value' => true,
'choice_value' => function ($choice) {
return $choice;
},
'multiple'=>false,
'expanded'=>true
])
->add('address', TextareaType::class)
->add('languages', ChoiceType::class, [
'choices' => [
'English' => 'Eng',
'Hindi' => 'Hin',
'Japanese' => 'Jap'
],
'multiple'=>true,
'expanded'=>true
])
->add('country', ChoiceType::class, [
'choices' => $countries,
'choice_label' => function ($choice, $key, $value) {
return ucwords($value);
},
])
->add('Submit', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
// Configure your form options here
]);
}
}
2.Контроллер (StudentRegistrationController.php)
<?php
namespace App\Controller;
use App\Entity\Student;
use App\Form\StudentRegistrationType;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class StudentRegistrationController extends AbstractController
{
#[Route('/student-registration', name: 'app_student_registration')]
public function index(Request $request, EntityManagerInterface $entityManager): Response
{
$student = new Student;
$form = $this ->createForm(StudentRegistrationType::class);
$form->handlerequest($request);
if ($form->isSubmitted()){
$data = $form->getData();
$language = $form->get('languages')->getData();
$student->setLanguagesKnown($language);
//dd($language);
dd($data);
$entityManager->persist($student);
$entityManager->flush();
return new Response($student->getId());
}
return $this->render('student_registration/index.html.twig', [
'controller_name' => 'StudentRegistrationController',
"form"=>$form
]);
}
}
3.Объект (student.php)
<?php
namespace App\Entity;
use App\Repository\StudentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: StudentRepository::class)]
class Student
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 40)]
private ?string $firstName = null;
#[ORM\Column(length: 40)]
private ?string $lastName = null;
#[ORM\Column(length: 100)]
private ?string $email = null;
#[ORM\Column(length: 10)]
private ?string $gender = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $address = null;
#[ORM\Column(type: Types::JSON)]
private array $languagesKnown = [];
#[ORM\Column(length: 255)]
private ?string $country = null;
public function getId(): ?int
{
return $this->id;
}
public function getFirstName(): ?string
{
return $this->firstName;
}
public function setFirstName(string $firstName): self
{
$this->firstName = $firstName;
return $this;
}
public function getLastName(): ?string
{
return $this->lastName;
}
public function setLastName(string $lastName): self
{
$this->lastName = $lastName;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getGender(): ?string
{
return $this->gender;
}
public function setGender(string $gender): self
{
$this->gender = $gender;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(string $address): self
{
$this->address = $address;
return $this;
}
public function getLanguagesKnown(): array
{
return $this->languagesKnown;
}
public function setLanguagesKnown(array $languagesKnown): self
{
$this->languagesKnown = $languagesKnown;
return $this;
}
public function getCountry(): ?string
{
return $this->country;
}
public function setCountry(string $country): self
{
$this->country = $country;
return $this;
}
}
4.index.html.twig
В этом файле ветки пол и языки неверны. Пожалуйста, исправьте и его.
{% extends 'base.html.twig'%}
{% block title %}Hello StudentRegistrationController!{% endblock %}
{% block body %}
<div class = "container">
<div class = "row ">
<h1 class = "mt-14 mb-6">Student Registration Form</h1>
<div class = "col-md-6">
{{ form_start(form, {'attr': {'class': 'form'}}) }}
{{ form_row(form.first_name, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form.last_name, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form.email, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form.gender, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form. address, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form.languages, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form.country, {'attr': {'class': 'form-control', 'style': 'margin-bottom: 30px;'}}) }}
{{ form_row(form. Submit, {'attr': {'class': 'btn btn-primary btn-block mt-3'}}) }}
{{ form_end(form) }}
</div>
</div>
</div>
{% endblock %}
5 .env-файл
APP_ENV=dev
APP_SECRET=8e7a728a3ce6fd1438895ebf22793360
DATABASE_URL = "mysql://root:@127.0.0.1:3307/StudentRegistration?serverVersion=8&charset=utf8mb4"
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
мое соединение с БД указано правильно. Когда я запускаю доктрину php bin/console:database:create База данных StudentRegistration создана в phpmyadmin.
Изображение 1:-Форма в браузере. Попробуйте исправить пол и языки в моем файле twig
Изображение 2:-После отправки формы браузер показывает вывод
Изображение 3:-Показанный вывод не сохраняется в моей базе данных





Перед вызовом $entityManager->flush() вам нужно вызвать $entityManager->persist($student);, чтобы сообщить Doctrine, что вы хотите сохранить его в базе данных.
Подробнее о сохраняющихся объектах здесь
Вам нужно передать объект $student в createForm() в качестве второго аргумента. Это делается для того, чтобы форма работала с этим объектом. В противном случае он не будет обновлять $student данные ввода формы.
Вы также должны явно указать опцию data_class в классе формы. Например.:
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Student::class,
]);
}
Соответствующую часть документации Symfony можно найти здесь: https://symfony.com/doc/current/forms.html#creating-form-classes
Я добавил
$entityManager->persist($student);все еще не работает.