====== Formulaire défini dans une classe ======
===== Création de la classe de formulaire =====
php bin/console make:form
The name of the form class :
> ArticleType
Donner à la classe un nom qui se termine par **Type** (par exemple **ArticleType** pour éditer
des entités de type **Article**).
The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
> App\Entity\Article
Donner le nom de l'entité si le formulaire est lié à une entité, sinon laisser vide.
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('denom', TextType::class, [
'label' => "Dénomination de l'article",
])
->add('desc', TextareaType::class, [
'label' => "Descriptif",
])
->add('couleur', TextType::class)
// ...
// ...
->add('save', SubmitType::class, [
'label' => "Enregistrer",
'attr' => [
'class' => 'btn btn-primary'
]
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Article::class,
]);
}
}
===== Utilisation dans un contrôleur =====
Utiliser la méthode **createForm** du contrôleur :
class ArticleController extends AbstractController
{
public function new()
{
$article = new Article();
// ...
$form = $this->createForm(ArticleType::class, $article);
return $this->render('article/edit.html.twig', [
'form' => $form->createView(),
]);
}
}
L'ajout d'options permet de redéfinir l'action et la méthode :
// ...
$form = $this->createForm(ArticleType::class, $article, [
'action' => $this->generateUrl('target_route'),
'method' => 'GET'
]);
// ...
===== Intégration dans un template =====
Forme simple sans aucun contrôle sur le rendu :
{{ form(form) }}
En spécifiant chaque champ (permet d'appliquer des options à chacun):
{{ form_start(form) }}
{{ form_row(form.denom) }}
{{ form_row(form.desc) }}
{{ form_row(form.couleur) }}
{{ form_widget(form.save) }}
{{ form_end(form) }}