2016-12-03 8 views
0

In meiner Basiszweigdatei rendere ich meine Fußzeile. In der Fußzeile ist dies ein Anmeldeformular für das Abonnieren des Newsletters. Dies ist de rendern Ruf in der Basis Zweig.Symfony2 Formvalidierung nicht im untergeordneten Zweig

{{ render(controller('MyBundle:Global:footer')) }} 

Über diesen Footer Controller rendere ich die Fußzeile. Hierdurch wird der Controller-Code:

/** 
* @Route("/{_locale}/newsletter/", defaults={"_locale": "nl"}, requirements={"_locale": "nl|en|de"}, name="_newsletter") 
*/ 
public function footerAction(Request $request) 
{ 
    $form = $this->createForm(new NewsletterType()); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     return $this->redirectToRoute('_404'); 
    } else { 
     return $this->render('MyBundle:global:footer.html.twig', array('form' => $form->createView())); 
    } 
} 

Wenn ich das Formular abzuschicken, was nur eine E-Mail-Eingang und einen Submit-Button dann diese Route ausgelöst wird, nur das Formular nicht validiert. In diesem Testbeispiel möchte ich es auf die 404-Seite umleiten. Aber es reicht nur die Fußzeile nur?

+0

Sie erhalten keine Fehler, da diese nicht in der Anfrage enthalten sind ... Sie schließen den Controller ein, damit Sie eine Unteranfrage stellen: https://knpuniversity.com/screencast/symfony-journey/sub- Anfrage-Interna – barat

Antwort

1

Ich nehme an, dass Sie dieses Formular auf vielen Seiten rendern, weil Sie es in der Fußzeile platzieren. Wie jede Form benötigen Sie ein Attribut Aktion in Form Element

beispiels
<form method="post" action="somewhere"> 

Und der Wert des action-Attribut ist, wo Ihre Daten ankommen, wenn jemand auf die Schaltfläche Senden trifft.

Meine Lösung besteht darin, eine zusätzliche Seite hinzuzufügen, die das gleiche Formular zeigt. Wie Sie es von Symfony gewöhnt sind, und rendern Sie das gleiche Formular in der Fußzeile und stellen Sie sicher, dass Ihr Formular die neue Seite mit demselben Formular übergibt. z.B.

$form->setAction($this->generateUrl('target_route')) 

Nun, wenn jemand das Formular übermittelt wird es mit der gleichen Form auf der Seite gesendet wird, und wenn es irgendwelche Fehler wird er sie auf dieser Seite sehen.

Verwandte Themen