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, ]); } }
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' ]); // ...
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) }}