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 Form
W 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.