====== 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 %}