Symfony 5 - Créer un formulaire

Symfony 5 - Créer un formulaire

symfony console make:form

Cette commande vous demande à partir de quelle entité vous devez créer ce formulaire

Vous pouvez donc rentrer par exemple "Product"

Cela va créer votre classe dans src/Form

Qui s'appellera ProductType.php

 

Nous pouvons donc maintenant appeler cette classe dans notre controleur et le passer à la vue

$product = new Product();
$form = $this->createForm(ProductType::class, $product);

 

Pour passer la variable form à la vue : 

'form' => $form->createView()

 

Pour afficher notre formulaire en twig

{{ form_start(form) }}

    {{ form_row(form) }}

{{ form_end(form) }}

 

Pour récupérer les données et les enregistrer en base de données, vous devez ajouter ces lignes dans votre formulaire :

Déjà on récupére l'objet $request pour avoir les données

use Symfony\Component\HttpFoundation\Request;

public function productAdd(Request $request): Response

 

Ensuite on met les données dans notre object $product

On regarde si le formulaire est valide

Et on persist et flush pour entrer les données

$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
    $em->persist($product);
    $em->flush();
}

 

Si vous voulez ensuite ajouter une redirection après l'envoi du formulaire, vous pouvez ajouter 

return $this->redirectToRoute('products');

 

Ensuite on peut aussi ajouter des flash messages

$this->addFlash('notice', 'Votre produit est bien enregistré !');

 

Dans base.html.twig, on doit les afficher :

{% for message in app.flashes('notice') %}
    <div class="alert alert-success mt-3" role="alert">
        {{ message }}
    </div>
{% endfor %}

 

Pour finir, voici notre code complet :

        $em = $this->getDoctrine()->getManager();
        $product = new Product();
        $form = $this->createForm(ProductType::class, $product);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $em->persist($product);
            $em->flush();

            $this->addFlash('notice', 'Votre produit est bien enregistré !');

            return $this->redirectToRoute('products');
        }

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

 

18/11/2021