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

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Scroll to Top