use App\Entity\Article;
public function create() {
$article = new Article();
$form = $this->createFormBuilder($article)
->add('title')
->add('content')
->add('image')
->getForm();
return $this->render('articles/create.html.twig', [
'formArticle' => $form->createView(),
]);
}
Si l'on désire forcer l'utilisation de types de champs :
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
...
->add('title', TextType::class)
->add('content', TextareaType::class)
La liste des types disponibles en standard est reprise dans la documentation
sur les formulaires : [[https://symfony.com/doc/current/forms.html#built-in-field-types|Built-in Field Types]]
===== Intégration du formulaire dans un template Twig =====
Forme la plus simple, mais on n'a aucun contrôle sur le rendu :
{{ form(formArticle) }}
Forme décomposée, permettant de structurer le formulaire comme on veut :
{{ form_start(formArticle) }}
{{ form_widget(formArticle.title) }}
{{ form_widget(formArticle.content) }}
{{ form_end(formArticle) }}
Note : tous les champs qu'on n'a pas inclus explicitement avec **form_widget**
seront inclus automatiquement à la fin du formulaire.
Avec l'ajout d'attributs et l'utilisation de **form_row** au lieu de **form_widget** :
{{ form_start(formArticle) }}
{{ form_row(formArticle.title, {
'attr': {'placeholder': "Titre de l'article"}})
}}
{{ form_row(formArticle.content, {
'attr': {'placeholder': "Contenu de l'article"}})
}}
{{ form_end(formArticle) }}
===== Moteur de rendu Bootstrap 4 =====
Doc : [[https://symfony.com/doc/current/form/bootstrap4.html]]
Les différents moteurs de rendu de Twig se trouvent dans le dossier
**vendor/symfony/twig-bridge/Resources/views/Form/**
Pour pouvoir utiliser le layout **bootstrap_4_layout.html.twig**, il faut d'abord
le déclarer dans les options de Twig.
Éditer le fichier **config/packages/twig.yaml** et ajouter cette ligne :
twig:
form_themes: ['bootstrap_4_layout.html.twig']
Puis ajouter ceci au début du template contenant un formulaire :
{% form_theme formArticle 'bootstrap_4_layout.html.twig' %}
{# remplacer formArticle par le nom du formulaire #}
Ensuite le formulaire peut se résumer à ceci :
{{ form_start(formArticle) }}
{{ form_widget(formArticle) }}
{{ form_end(formArticle) }}
Le bouton **Enregistrer** est volontairement ajouté en html, comme cela
**formArticle** peut être utilisé aussi bien dans le cas d'un ajout que
d'une modification (avec différents boutons).
===== Relations dans les formulaires =====
Exemple avec une relation **Category** dans l'entité **Article** :
use App\Entity\Article;
use App\Entity\Category;
...
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
...
$form = $this->createFormBuilder($article)
->add('title')
->add('content')
->add('category', EntityType::class, [
'class' => Category::class,
'choice_label' => 'title',
])
->add('image')
->getForm();
Et au niveau du template :
{{ form_row(formArticle.category) }}