Tvorba a používanie formulárov v Symfony

Formuláre sú základným prvkom webových aplikácií a v Symfony ponúkajú efektívny a bezpečný spôsob spracovania údajov. Vďaka Form Component v Symfony môžete jednoducho vytvárať, validovať a spracovávať formuláre.

Čo je Symfony Form Component a aký má praktický význam?

Symfony Form Component umožňuje:

Vďaka Form Component v Symfony nemusíte písať HTML formuláre ručne, ale môžete ich generovať dynamicky a spracovávať ich jednoduchým spôsobom.

1. Inštalácia a konfigurácia Symfony formulárov

1.1 Inštalácia Symfony Form Component

Ak vo vašom projekte ešte nie je nainštalovaný Form Component, môžete ho pridať príkazom:

composer require symfony/form

1.2 Povolenie CSRF ochrany

V Symfony sú formuláre automaticky chránené pred Cross-Site Request Forgery (CSRF) útokmi. Uistite sa, že v súbore config/packages/framework.yaml máte:

framework:
    csrf_protection: true

2. Vytvorenie formulára v Symfony

2.1 Definovanie entity

Najskôr vytvorme jednoduchú entitu Contact:

<?php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Contact
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private int $id;

    #[ORM\Column(type: 'string', length: 100)]
    private string $name;

    #[ORM\Column(type: 'string', length: 255)]
    private string $email;

    #[ORM\Column(type: 'text')]
    private string $message;

    // Gettery a settery...
}
?>

2.2 Vytvorenie formulára

V Symfony sa formuláre definujú v samostatnej triede. Vytvorme formulár ContactFormType:

<?php
namespace App\Form;

use App\Entity\Contact;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ContactFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, ['label' => 'Meno'])
            ->add('email', EmailType::class, ['label' => 'E-mail'])
            ->add('message', TextareaType::class, ['label' => 'Správa'])
            ->add('submit', SubmitType::class, ['label' => 'Odoslať']);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Contact::class,
        ]);
    }
}
?>

3. Spracovanie formulára v kontroléri

Pridanie formulára do kontroléra

Teraz vytvorme kontrolér, ktorý zobrazí a spracuje formulár:

<?php
namespace App\Controller;

use App\Entity\Contact;
use App\Form\ContactFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class ContactController extends AbstractController
{
    #[Route('/kontakt', name: 'contact')]
    public function contact(Request $request): Response
    {
        $contact = new Contact();
        $form = $this->createForm(ContactFormType::class, $contact);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // Spracovanie formulára (uloženie do databázy, odoslanie e-mailu)
            return $this->redirectToRoute('contact_success');
        }

        return $this->render('contact/index.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}
?>

3.1 Zobrazenie formulára v Twig šablóne

<!DOCTYPE html>
<html>
<head>
    <title>Kontaktujte nás</title>
</head>
<body>

    <h1>Kontaktujte nás</h1>
    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}

</body>
</html>

Najčastejšie otázky

1. Ako môžem pridať validáciu údajov?

Pridajte validáciu do entity pomocou anotácií:

use Symfony\Component\Validator\Constraints as Assert;

#[Assert\NotBlank]
private string $name;

#[Assert\Email]
private string $email;

2. Ako môžem predvyplniť formulár?

$form = $this->createForm(ContactFormType::class, [
    'name' => 'Predvyplnené meno',
]);

3. Ako môžem pridať vlastné CSS triedy?

Použite možnosť attr:

->add('name', TextType::class, ['attr' => ['class' => 'form-control']])

Top 5 zaujímavých faktov o Symfony formulároch

  1. Symfony formuláre môžu byť prepojené priamo s Doctrine entitami.
  2. Vstavaná ochrana pred CSRF útokmi zabezpečuje vyššiu bezpečnosť.
  3. Symfony podporuje AJAX spracovanie formulárov bez nutnosti obnovy stránky.
  4. Pomocou Form Extension môžete vytvárať vlastné formulárové prvky.
  5. Symfony ponúka integráciu s populárnymi JavaScript frameworkami ako Vue.js či React.

Chcete sa naučiť Symfony?

Ak máte záujem o prezenčné alebo online školenie programovania v PHP, pozrite si našu ponuku na www.like-it.sk. Naše kurzy vedú skúsení odborníci, ktorí vám pomôžu zvládnuť Symfony od základov až po pokročilé koncepty.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite so náš ebook teraz výnimočne zdarma!!!

Marián Knězek

 

Súvisiace články: