2010-12-01 4 views
2

Wenn ich Modul in Symfony erzeugen 1.4, erstellt es (zum Beispiel) ‚Neu‘ und ‚Erstellen‘ Methoden wie folgt aus:Symfony Generation

public function executeNew(sfWebRequest $request) 
{ 
    $this->form = new SomeForm(); 
} 

public function executeCreate(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST)); 

    $this->form = new SomeForm(); 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 
    if ($form->isValid()) 
    { 
    $res_object = $form->save(); 
    $this->redirect('results_show', $res_object); 
    } 

    $this->setTemplate('new'); 
} 

Mit --non-verbose-templates es so etwas wie den Code generiert unten (ich es geändert um nur den Erzeugungsteil anzuzeigen):

public function executeNew(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST)); 

    $this->form = new SomeForm(); 
    if ($request->isMethod(sfRequest::POST)) { 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); 
    if ($form->isValid()) 
    { 
     $res_object = $form->save(); 
     $this->redirect('results_show', $res_object); 
    } 
    } 
} 

Was ist der Grund für eine solche Standardgenerierung? Ich denke, dass diese Methode kompakter ist, weniger Routen und Aktionen hinzufügt und die URL für die erste und die nächste (wenn es Fehler gibt) Formularanzeige nicht ändert. Die Standardgenerierungsmethode sollte jedoch die beste oder die am häufigsten verwendbare Methode sein. Also, was wissen die Leute von Sensio Labs, aber ich nicht?

Antwort

2

Die erste Vorlage eignet sich besser zum Erstellen einer RESTful-Anwendung mit Symfony.

Wenn Sie die clevere Klasse sfObjectRouteCollection zum Erstellen einer Sammlung von Routen verwenden möchten, werden die Methoden executeNew und executeCreate erwartet.

sfObjectRouteCollection standardmäßig erstellte Routen für die folgenden Aktionen:

Liste, neu, erstellen, bearbeiten, aktualisieren, löschen und anzeigen.

Sie sind richtig, dass Ihre bevorzugte Vorlage nur eine URL hat, aber das ist wirklich kein Problem, wenn Sie Lehre/Propel Formen verwenden und dann die Helfer form_tag_for(). Dieser Helfer nimmt die Form und den Namen der Routensammlung an, wenn die Argumente dann selbst herausfinden, welches die richtige Route/URL ist, die aus der Sammlung verwendet werden soll.

+0

Aber es kann eine solche Situation geben. Vom Benutzer ausgefülltes Formular (some_form/new), aber einige Fehler gemacht (umgeleitet zu some_form/create). Er hatte keine Zeit mehr, diese Aufgabe zu erledigen, aber er wollte in Zukunft etwas ausfüllen (oder einfach das Formular auffüllen). Was macht der Benutzer in dieser Situation? Ja - markiert die Seite. Aber was wird er sehen, wenn er zurückkommt ?! 404! Weil er zu der Aktion zurückkehren wird, die nur mit der POST-Methode (some_form/create) funktioniert. Ich denke nicht, dass es gut ist. – kpower

+0

neue und erstellen können die gleiche URL teilen und die Routen können nach Anfrage Typ unterschieden werden –

+0

Natürlich, aber Sie sollten benutzerdefinierte Regeln selbst hinzufügen, um die korrekte Einrichtung zu machen, und dies wird nicht funktionieren "von der Box". Habe ich recht? – kpower