====== Formulaire complet avec entité, ajout et édition ====== ===== Formulaire ===== 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 ===== 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"} }) }} {{ form_end(formArticle) }} {% endblock %}