Outils pour utilisateurs

Outils du site


symfony4:formulaires_formulaire_complet_avec_entite

Formulaire complet avec entité, ajout et édition

Formulaire

ArticleType.php
use App\Entity\Article;
use App\Entity\Categorie;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
 
class ArticleType extends AbstractType {
 
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('titre')
            ->add('contenu')
            ->add('image')
            ->add('categorie', EntityType::class, [
                'class'        => Categorie::class,
                'choice_label' => 'titre',
                'required'     => false               // si on veut pouvoir ne rien choisir
            ])
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults([
            'data_class' => Article::class,
        ]);
    }
}

Contrôleur

ArticlesController.php
use App\Entity\Article;
use App\Form\ArticleType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
 
...
 
/**
 * @Route("/articles/create", name="creer_article")
 * @Route("/articles/{id}/edit", name="editer_article")
 */
public function edit(
    Article $article = null,
    Request $request,
    EntityManagerInterface $manager
) {
 
    // Si l'article est null, on est dans l'ajout d'un nouvel article,
    // sinon on est dans l'édition d'un article existant.
    if(!$article)
        $article = new Article();
 
    $form = $this->createForm(ArticleType::class, $article);
    $form->handleRequest($request);
 
    if($form->isSubmitted() && $form->isValid()) {
 
        // Si c'est un nouvel article, initialiser sa date de création
        if(!$article->getId()) {
            $article->setCreatedAt(new \DateTime());
        }
 
        $manager->persist($article);
        $manager->flush();
 
        return $this->redirectToRoute('voir_article', [
            'id' => $article->getId()
        ]);
    }
 
    return $this->render('articles/edit.html.twig', [
        'formArticle' => $form->createView(),
        'editMode'    => $article->getId() !== null,
    ]);
}

edit.html.twig

{% extends 'base.html.twig' %}
{% form_theme formArticle 'bootstrap_4_layout.html.twig' %}
 
{% block body%}
 
{{ form_start(formArticle) }}
 
{{ form_row(formArticle.title, {
   'label': 'Titre',
   'attr': {'placeholder': "Titre de l'article"},
}) }}
 
{{ form_row(formArticle.content, {
   'label': 'Contenu',
   'attr': {'placeholder': "Contenu de l'article"},
}) }}
 
{{ form_row(formArticle.image, {
   'label': 'Image',
   'attr': {'placeholder': "URL de l'image"}
}) }}
 
<button type="submit" class="btn btn-primary">
{% if editMode %}
   Enregistrer les modifications
{% else %}
   Ajouter l'article
{% endif %}
</button>
 
{{ form_end(formArticle) }}
 
{% endblock %}
symfony4/formulaires_formulaire_complet_avec_entite.txt · Dernière modification: 2020/04/08 08:21 par marclebrun