Формы и валидация в Symfony
Разработка web-приложений с использованием программных платформ
Теория
В Symfony формы и валидация являются важными компонентами для обработки данных, отправленных пользователем.
Создание форм
- Создайте класс формы, расширяющий abstract class FormType. Например:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class);
}
}
- В контроллере создайте форму и обработайте запрос:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\TaskType;
class TaskController extends AbstractController
{
/**
* @Route("/task/new", name="task_new")
*/
public function new(Request $request)
{
$form = $this->createForm(TaskType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Обработайте данные формы
}
return $this->render('task/new.html.twig', [
'form' => $form->createView(),
]);
}
}
Валидация
- Определите ограничения для валидации в сущности:
use Symfony\Component\Validator\Constraints as Assert;
class Task
{
/**
* @Assert\NotBlank()
*/
private $task;
/**
* @Assert\DateTime()
*/
private $dueDate;
// getters and setters
}
- В классе формы укажите, какую сущность она должна валидировать:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\Task;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
}
Теперь при отправке формы Symfony автоматически проверит данные на соответствие ограничениям и сообщит об ошибках.