Ouais normale qu'il n'y est rien en base, symfony2 n'est pas encore magique, ou alors je suis un pauvre moldue.
- null # data to bind, this is where your entity could go if you have that defined as a servi
Là c'est surement faux, il te faut une entity mappé en base, ou alors définir un mapped false et populé l'objet à la main.
Je part du postulat que tu t'es trompé et que tu as une table contact avec l'entity Contact image de ta table contact
Autre chose, la factory pour les formulaires fournit par symfony2 n'est pas à utiliser en tant que service tel quel. Tu doit toi même surcharger leur factory, car là tu ne peut rien configurer (là tu en as une utilisation basique, mais tu verra que tu ne peut rien passer via les yml) Regarde FOSUserBundle, ils le font.
<?php
$form = $this->get('form_contact.contact.form');
$contact = new Contact(); //Entity contact image de la table contact
if ($request->getMethod() == 'POST' && $request->request->has($form->getName()) { //Best practices
if($form->isValide){
/**
Les forms symfony2 fonctionne sur le principe de l'hydratation, ce fait $form->getData() === $Contact
Il vient hydrater ton object $contact avec les nouvelles donnée à la volé grâce au setter & getter de ton entity
**/
//instanceof Doctrine\ORM\EntityManager
/**
Enregistre l'entity Contact dans le UnitOfWork courante
Tant que tu ne flush pas, tu reste dans la UnitOfWork donc dans la transaction en cours.
Tu peut donc persist n object au sein d'une UnitOfWork puis flush qui déclenchera le commit puis qui rollbackera l'ensemble des actions
au seins de la trasancation si une erreur sauvage surgit. Sa évite que le début du block SQL soit enregistré en base alors que l'autre partie à échoué,
et de se retrouver avec des informations incohérentes.
START TRANSACTION;
INSERT CONTACT;
INSERT N OBJECT
COMMIT || ROLLBACK;
Sa te permet de gérer l'intégrité des données, principe ACIDE
**/
$em->persist($contact); //Dans notre cas l'intégrité ne s'étend que sur l'object Contact, il n'y a pas d'autre action inhérente à l'ajout de contact en base
$em->flush(); //Déclenche le commit
$this->get('session')->setFlash('notice', 'Merci de nous avoir contacté, nous répondrons à vos questions dans les plus brefs délais.');
/**
On redirige toujours après un success de formulaire, car il si refresh celà va se ré enregistré en base à l'indentique.
**/
return new RedirectResponse(/ **redirige vers cette même page ou ailleur** /);
}else{
$this->get('session')->setFlash('notice', 'Merci de nous avoir contacté, nous répondrons à vos questions dans les plus brefs délais.');
}
}
//return la vue de ton controller