use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
// ...
Liste détaillée des types.FormBuilder
permet de construire un formulaire :
/**
* @Route("livresf/form1/")
*/
public function form1Action(Request $request) {
/* Dans ce controller, on génère un formulaire permettant de saisir les informations d'une instance de livreSF. */
$livresf = new LivreSF();
$livresf->setLivTitre("Le cerveau solitaire");
$livresf->setLivNum(90);
$form = $this->createFormBuilder($livresf);
$form->add('livtitre',TextType::class, array('attr' => array('maxlength' => 22)));
$form->add('livnum', IntegerType::class);
$form->add('save', SubmitType::class, array('label' => 'Create livresf'));
$form->setMethod("GET");
$form->getForm();
return $this->render("default/new.html.twig", array('form' => $form->createView()));
}
/**
* @Route("livresf/form1/")
*/
public function form1Action(Request $request) {
$livresf = new LivreSF();
$livresf->setLivTitre("Le cerveau solitaire");
$livresf->setLivNum(90);
$form = $this->createFormBuilder($livresf)
->add('livtitre',TextType::class, array('attr' => array('maxlength' => 22)))
->add('livnum', IntegerType::class)
->add('save', SubmitType::class, array('label' => 'Create livresf'))
->setMethod("GET")
->getForm();
return $this->render("default/new.html.twig", array('form' => $form->createView()));
}
{# app/Resources/views/default/new.html.twig #}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
action
et method
des formulaires
POST
, donc dans ce cas pas besoin de setMethod("POST")
!
/**
* @Route("livresf/form2/")
*/
public function form2Action(Request $request) {
$livresf = new LivreSF();
$form = $this->createFormBuilder($livresf)
->add('livtitre',TextType::class, array('attr' => array('maxlength' => 22)))
->add('livnum', IntegerType::class)
->add('save', SubmitType::class, array('label' => 'Create livresf'))
//->setMethod("POST") inutile car méthode par défaut
->getForm();
return $this->render("default/new.html.twig", array('form' => $form->createView()));
}
Response
:use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
Request
permet de configurer et réaliser une requête HTTP :use Symfony\Component\HttpFoundation\Request;
public function form3Action(Request $request) {
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$livresf = $form->getData();
/* on fait ce qu'on veut de $livresf*/
return $this->redirectToRoute('accueil');
}
/**
* @Route("livresf/form3/")
*/
public function form3Action(Request $request) {
$livresf = new LivreSF();
$form = $this->createFormBuilder($livresf)
->add('livtitre',TextType::class)
->add('livnum', IntegerType::class)
->add('save', SubmitType::class, array('label' => 'Create livresf'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$livresf = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($livresf);
$entityManager->flush();
return $this->redirectToRoute('accueil');
}
return $this->render('default/new.html.twig', array(
'form' => $form->createView(),
));
}
/* (...) *.
use Symfony\Component\Validator\Constraints as Assert;
/* (...) *.
class LivreSF
{
/**
* @ORM\Column(type="string", length=100)
* @Assert\NotBlank()
*/
private $liv_titre;
/* (...) *.
Bloque le traitement du formulaire et place un message dans la page : /**
* @Assert\IsTrue(message="Le titre du livre ne peut pas être 'Le Masque SF'")
*/
public function isLivTitreOk()
{
return $this->liv_titre != "Le Masque SF";
}