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.
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.
Ak vo vašom projekte ešte nie je nainštalovaný Form Component, môžete ho pridať príkazom:
composer require symfony/form
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
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... } ?>
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, ]); } } ?>
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(), ]); } } ?>
<!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>
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;
$form = $this->createForm(ContactFormType::class, [ 'name' => 'Predvyplnené meno', ]);
Použite možnosť attr
:
->add('name', TextType::class, ['attr' => ['class' => 'form-control']])
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.