Classe FormBuilder

Dans le contrôleur, on aura :

<?php
namespace App\Controller;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class ProfileController extends Controller
{
  public function ajouterAction($id)
  {
	  $profile = new Profile();
	
	 // Instanciation du fromBuilder
	  $formBuilder = $this->createFormBuilder($profile);
	
	// Ajout des champs
	  $formBuilder
	    // Syntaxe Symfony 2 
	    //->add('id',        'text')
	    ->add('id', TextType::class)
	    ->setAction($this->generateUrl('lpars_cours_formulaires_formbuilder'));;
	    
	
	  // Génération du formulaire
	  $form = $formBuilder->getForm();
	
	  return $this->render('LPARSBundle:Diablo:ajouter.html.twig', array(
	    'form' => $form->createView()));
  }
?>

Côté vue, il n'y a plus qu'à ajouter le formulaire

	{{ form_start(form) }}
	{{ form_errors(form) }}
		{{ form_widget(form) }} 
	{{ form_end(form) }}

On obtient alors le formulaire

A noter l'utilisation du jeton de sécurité pour lutter contre les Cross-site request forgery.

Types de champs

Récupération des données

// src/Controller/ProfileController
// Récupération de la requête
$request = Request::createFromGlobals();

// Vérification de la méthode
if ($request->getMethod() == 'POST')
{
   // Récupération des données de la requête
   $form->handleRequest($request);
   // Récupération des données du formulaire
   $profile = $form->getData();
}