Ich möchte Form Validierungslogik trennen:Symfony 2 - Einzelformularlogik, zeigen Formfehler umleiten nach
public function contactAction()
{
$form = $this->createForm(new ContactType());
$request = $this->get('request');
if ($request->isMethod('POST')) {
$form->submit($request);
if ($form->isValid()) {
$mailer = $this->get('mailer');
// .. setup a message and send it
return $this->redirect($this->generateUrl('_demo'));
}
}
return array('form' => $form->createView());
}
ich in 2 separate Aktionen übersetzen:
public function contactAction()
{
$form = $this->createForm(new ContactType());
return array('form' => $form->createView());
}
public function contactSendAction()
{
$form = $this->createForm(new ContactType());
$request = $this->get('request');
if ($request->isMethod('POST')) {
$form->submit($request);
if ($form->isValid()) {
$mailer = $this->get('mailer');
// .. setup a message and send it using
return $this->redirect($this->generateUrl('_demo'));
}
}
// errors found - go back
return $this->redirect($this->generateUrl('contact'));
}
Das Problem ist, dass wenn Fehler im Formular vorhanden sind - nach Formularvalidierung und Weiterleitung wurde das NICHT in der KontaktAktion angezeigt. (wahrscheinlich werden sie nach Umleitung bereits vergessen - Fehlerkontext wird verloren gehen)
vielen Dank für Informationen über die Methodenanforderung und die Verwendung der Rückansicht anstelle der Weiterleitung. Aber wenn ich stattdessen view verwende, wird es genauso sein wie es war - 2 Logiken sind nicht mehr getrennt. Gibt es eine Möglichkeit, Redirect zu verwenden und Formularfehler nicht zu verlieren? – pleerock
Umleiten und nicht verlieren Formulardaten scheint nicht die richtige Idee. Sie könnten die Fehler in der Sitzung festlegen und sie dem Formular hinzufügen, aber das ist voller möglicher Fehler. Wovon versuchst du durch die logische Trennung zu kommen? Sie könnten $ this-> contactAction(); 'zurückgeben, wenn Sie das wollten? – Luke
Sorry, mein letzter Kommentar zu return $ this-> contactAction(); war mir spit-balling und nicht gut überlegt – Luke