Tvorba a používání formulářů v Symfony

Formuláře jsou základním prvkem webových aplikací a v Symfony nabízejí efektivní a bezpečný způsob zpracování dat. Díky Form Component v Symfonu můžete snadno vytvářet, validovat a zpracovávat formuláře.

Co je Symfony Form Component a jaký má praktický význam?

Symfony Form Component umožňuje:

Díky Form Component v Symfony nemusíte psát HTML formuláře ručně, ale můžete je generovat dynamicky a zpracovávat je jednoduchým způsobem.

1. Instalace a konfigurace Symfony formulářů

1.1 Instalace Symfony Form Component

Pokud ve vašem projektu ještě není nainstalován Form Component, můžete jej přidat příkazem:

composer require symfony/form

1.2 Povolení CSRF ochrany

V Symfony jsou formuláře automaticky chráněny před Cross-Site Request Forgery (CSRF) útoky. Ujistěte se, že v souboru config/packages/framework.yaml máte:

framework: csrf_protection: true

2. Vytvoření formuláře v Symfony

2.1 Definování entity

Nejprve vytvořme jednoduchou 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(typ: 'string', délka: 100)] private string $name; #[ORM\Column(typ: 'string', délka: 255)] private string $email; #[ORM\Column(type: 'text')] private string $message; // Gettery a settery... } ?>

2.2 Vytvoření formuláře

V Symfony se formuláře definují v samostatné třídě. Vytvořme formulář 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' => 'Jméno']) ->add('email', EmailType::class, ['label' => 'E-mail']) ->add('message', TextareaType::class, ['label' => 'Zpráva']) ->add('submit', SubmitType::class, ['label' => 'Odeslat']); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Contact::class, ]); } } ?>

3. Zpracování formuláře v kontroléru

Přidání formuláře do kontroléru

Nyní vytvořme kontrolér, který zobrazí a zpracuje formulář:

<?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', název: 'contact')] public function contact(Request $request): Response { $contact = nový Contact(); $form = $this->createForm(ContactFormType::class, $contact); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // Zpracování formuláře (uložení do databáze, odeslání e-mailu) return $this->redirectToRoute('contact_success'); } return $this->render('contact/index.html.twig', [ 'form' => $form->createView(), ]); } } ?>

3.1 Zobrazení formuláře v Twig šabloně

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

Nejčastější otázky

1. Jak mohu přidat validaci dat?

Přidejte validaci do entity pomocí anotací:

use Symfony\Component\Validator\Constraints as Assert; #[Assert\NotBlank] private string $name; #[Assert\Email] private string $email;

2. Jak mohu předvyplnit formulář?

$form = $this->createForm(ContactFormType::class, [ 'name' => 'Předvyplněné jméno', ]);

3. Jak mohu přidat vlastní CSS třídy?

Použijte možnost attr:

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

Top 5 zajímavých faktů o Symfony formulářích

  1. Symfony formuláře mohou být propojeny přímo s Doctrine entitami.
  2. Vestavěná ochrana před CSRF útoky zajišťuje vyšší bezpečnost.
  3. Symfony podporuje AJAX zpracování formulářů bez nutnosti obnovy stránky.
  4. Pomocí Form Extension můžete vytvářet vlastní formulářové prvky.
  5. Symfony nabízí integraci s populárními JavaScript frameworky jako Vue.js či React.

Chcete se naučit Symfony?

Máte-li zájem o prezenční nebo online školení programování v PHP, prohlédněte si naši nabídku na www.like-it.sk. Naše kurzy vedou zkušení odborníci, kteří vám pomohou zvládnout Symfony od základů.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz PHP - Programování dynamických webových stránek v PHP a úvod do AJAXu

Marián Knězek