Poznajemy form builder w Symfony. Nie lubię form builderów, moim zdaniem komplikują niepotrzebnie to, co każdy umie napisać z zamkniętymi oczami. W Symfony ich jednak używamy.

Ok, tworzymy add.html.twig:

{% extends 'base.html.twig' %}

{% block title %}Create New Post{% endblock %}

{% block body %}
  {{ form(form) }}
{% endblock %}

Teraz tworzymy metodę:

#[Route('/micro_post/add', name: 'app_micro_post_add', priority: 2)]
    public function add(): Response
    {
        $microPost = new MicroPost();
        $form = $this->createFormBuilder($microPost)
            ->add('title')
            ->add('content')
            ->add('submit', SubmitType::class, ['label' => 'Save'])
            ->getForm();

        return $this->render(
            'micro_post/add.html.twig',
            [
                'form' => $form
            ]
        );
    }

Priorytet, aby się nam nie gryzło. Ok, tutaj pięknie nam formularz wytworzy, musimy tylko jeszcze doimportować SubmitType:

use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;

Od razu doimportowałem TextType i Request, przyda się w następnym przykładzie – formularz GETowy:

#[Route('/getform', name: 'app_get_form', priority: 2)]
    public function getform(): Response
    {
        
        $form = $this->createFormBuilder()
        ->setAction($this->generateUrl('app_get_name'))
        ->setMethod('GET')
        ->add('user_name', TextType::class)
        ->add('save', SubmitType::class)
        ->getForm();

        return $this->render(
            'micro_post/add.html.twig',
            [
                'form' => $form
            ]
        );
    }

Wszystko mogę zrozumieć, i dziwny wzorzec Repository-Entity i cały ten Doctrine zamiast Eloquenta i Laravelowego podejścia, ale żeby tak się musieć bawić, aby stworzyć zwykły formularz GET?

I jeszcze on nam zapisuje te dane jako tablica. Ok, napiszmy metodę, która będzie odczytywać te dane:

 #[Route('/getname', name: 'app_get_name', priority: 2)]
    public function getname(Request $request): Response
    {
        return new Response("<b>Hello " .$request->query->all('form')['user_name']. "</b>" );
    }

Symfrony jest „świetnie udokumentowane”, zwłaszcza jak na framework, który jest skokowo trudniejszy niż taki Laravel, gdzie wszystko jest opisane z przykładami jak dla małych dzieci.

Ok, skoro już jesteśmy w temacie: tak się pobiera $_GET (normalne, nie w formie tablicy) w Symfony:

$request->query->get('id');

A tak pobieramy POST:

$request->getPayload()->get('category', 'default category');

Nieczęsto będziemy to robić, bo Symfony choć komplikuje życie w jednej dziedzinie, to ułatwia w drugiej i niedługo poznamy, jak bajecznie proste jest submitowanie formularzy i zapisywanie do bazy danych.

Tym niemniej – getPayload to odpowiednik $_POST, jeżeli kiedykolwiek będziemy tego potrzebować.

Natomiast wartości tablicowe z geta pobieramy tak:

$request->query->all('form')['user_name']

Sam się Symfony powoli uczę i przyznaję, że jest skokowo trudniejsze, z drugiej strony istnieją zalety tego podejścia w stosunku do podejścia Laravelowego, choć koniec końców jedno i drugie to świetne frameworki, którymi zrobisz wszystko.