Symfony 6 + obsługa formularzy metodą POST
Symfony 6 to nowa wersja popularnego frameworka do tworzenia aplikacji webowych w języku PHP. Jedną z ważnych funkcjonalności, które oferuje, jest obsługa formularzy metodą POST. Dzięki temu programiści mogą łatwo tworzyć formularze, które umożliwiają użytkownikom przesyłanie danych do serwera w sposób bezpieczny.
W przypadku korzystania z formularzy metodą POST, ważnym elementem jest zabezpieczenie przed atakami CSRF (Cross-Site Request Forgery), które polegają na podszywaniu się przez atakującego pod prawdziwego użytkownika i wykorzystaniu jego uprawnień do wykonania niepożądanych operacji. Symfony 6 oferuje mechanizmy ochrony przed CSRF, które pozwalają na bezpieczne przesyłanie danych z formularzy i zminimalizowanie ryzyka ataków.
Zaczynamy od stworzenia kontrolera:
php bin/console make:controller FormW wyniku działania tego polecenia stworzą się dwa pliki, jeden kontrolera, drugi widoku.

W pliku kontrolera (src/Controller/FormController.php)wpisujemy następujący kod:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\{TextType, SubmitType};
class FormController extends AbstractController
{
#[Route('/form', name: 'app_form')]
public function form(Request $request)
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('surname', TextType::class)
->add('submit', SubmitType::class, ['label' => 'Wyślij'])
->getForm()
->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
return $this->render('form/form_submit.html.twig', [
'name' => $data['name'],
'surname' => $data['surname']
]);
}
return $this->render('form/index.html.twig', [
'form' => $form->createView()
]);
}
}Ten kontroler jest odpowiedzialny za obsługę formularza z polami “name” i “surname”, który można wyświetlić na stronie internetowej pod adresem “/form”. Wykorzystuje on klasę AbstractController z frameworka Symfony oraz kilka innych klas, takich jak Request, Route, TextType, SubmitType oraz createFormBuilder.
W metodzie “form” kontrolera tworzony jest formularz za pomocą metody “createFormBuilder”, która dodaje pola tekstowe “name” i “surname”, a także przycisk “submit”. Następnie formularz jest przetwarzany za pomocą metody “handleRequest”, która obsługuje przesłane dane z formularza i sprawdza, czy formularz jest poprawnie wypełniony.
Jeśli formularz został poprawnie wypełniony, dane są pobierane za pomocą metody “getData” i wyświetlane na stronie “/form_submit”. W przeciwnym przypadku formularz jest renderowany na stronie “/form” za pomocą metody “createView”.
Kod widoku (templates/form/index.html.twig) zmieniamy na następujący:
{% extends 'base.html.twig' %}
{% block title %}Formularz{% endblock %}
{% block body %}
{{ form_start(form, {'action': path('app_form'), 'method': 'POST'}) }}
{{ form_row(form.name) }}
{{ form_row(form.surname) }}
{{ form_row(form.submit) }}
{{ form_end(form) }}
{% endblock %}Oraz tworzymy dodatkowy widok (templates/form/form_submit.html.twig), który wyświetli nam podane w formularzu dane:
{% extends 'base.html.twig' %}
{% block title %}Dane przekazane przez formularz{% endblock %}
{% block body %}
<p>Imię: {{ name }}</p>
<p>Nazwisko: {{ surname }}</p>
{% endblock %}Jak widać powyżej Symfony 6 jest potężnym narzędziem dla programistów PHP, umożliwiającym łatwe tworzenie bezpiecznych formularzy metodą POST i zapobiegających atakom CSRF. Dzięki wykorzystaniu klasy AbstractController oraz innych klas dostępnych w frameworku Symfony, tworzenie kontrolerów oraz widoków staje się prostsze i bardziej intuicyjne. Framework ten jest rozwijany przez duże grono deweloperów i cieszy się dużą popularnością, co zapewnia jego ciągły rozwój i ulepszanie. Warto zatem poświęcić trochę czasu na poznanie Symfony 6 i wykorzystać go w swojej pracy programisty.