J'avais du passer quelques heures (plusieurs) avant de résoudre ce problème. Je n'ai pas lu ton code mais je te passe le mien pour t'inspirer
l'idee est juste d'inclure une action du controller dans le layout (car mon formulaire devait se positionner la parce que je le veux sur toutes les pages du site) il s'agit de:
1 2 3 4 5 6 7 8 9
| public function emailFormAction()
{
$email = new Email();
$formBuilder = $this->createFormBuilder($email);
$formBuilder->add('name', 'email');
$form = $formBuilder->getForm();
return $this->render('BizengineBlogBundle:Blog:email_form.html.twig', array('form'=>$form->createView()));
} |
et ma vue (depuis le layout):
{{render(controller('BizengineBlogBundle:Blog:emailForm'))}}
et le template "email_form.html.twig":
1 2 3 4 5 6
| <div class="search_box pull-right">
<form action="{{path('bizengine_email_form')}}" method="post">
{{form_widget(form.name, {'attr':{'placeholder':'Your email address'}})}}
<button type="submit" class="btn btn-default"><i class="fa fa-arrow-circle-o-right"></i></button>
</form>
</div> |
et enfin la route et l'action du traitement des donnees recu du formulaire:
1 2 3 4
|
bizengine_email_form:
pattern: /email
defaults: { _controller:BizengineBlogBundle:Blog:emailSending } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
public function emailSendingAction()
{
$email = new Email();
$em = $this->getDoctrine()->getManager();
$formBuilder = $this->createFormBuilder($email);
$formBuilder->add('name');
$form = $formBuilder->getForm();
$emails = $em->getRepository('BizengineBlogBundle:Email')->findAll();
$request = $this->getRequest();
if($request->getMethod()=="POST")
{
$form->bind($request);
//if($form->isValid()){
foreach($emails as $hit){
if ($hit->getName() == $email->getName()){
$this->get('session')->getFlashBag()->add('denied', 'This email has been used already.
Please kindly choose an other one');
return $this->redirect($this->generateUrl('bizengine_user_homepage'));
}
}
$em->persist($email);
$em->flush();
$this->get('session')->getFlashBag()->add('creation', 'your email has been saved successfully !');
return $this->redirect($this->generateUrl('bizengine_user_homepage'));
//}
}
$this->get('session')->getFlashBag()->add('denied', 'creation of the email faild.
Please kindly inter a right email adress');
return $this->redirect($this->generateUrl('bizengine_user_homepage'));
} |
Je te rappel que mon application est encore en version beta c'est pourquoi tu constatera que l'objet email n'est pas valide et je le persist malgre tout....
Bref ce code fonctionne bien avec moi et j'utiliser la version 2.7 de symfony. L'idee est juste d'avoir deux actions dans le controller dont une affiche le formulaire en permanence et l'autre traite les donnees envoyer... je m'etais debrouille comme cela mais s'il existe une bonne pratique que cela je prie quiconque de me la montrer afin d'ameliorer mon code.
Enfin si ma solution t'aide, merci de cliquer surl le bouton "ok" en bas.
Partager