2017-05-23 3 views
1

Ich bin beschäftigt, eine Symfony 3 App zu entwickeln.Symfony: mehrere Routen mit verschiedenen Parametern mit Standard null

Ich muß wissen, ob es möglich ist, eine Aktion zu haben, die von 2 Routen bedient wird:

  • ein mit 1 Parameter
  • ein mit 2 Parametern

Im ersten Fall , wäre es für das Erstellen einer neuen Entität, die der gegebenen Entität zugeordnet ist. Im zweiten Fall wäre es, eine bestehende und gegebene Entität zu bearbeiten, die einer anderen gegebenen Entität zugeordnet ist.

Wenn das nicht klar, hier mein Beispiel:

/** 
    * @Route("/admin/instances/{group}/reunions/nouveau", requirements={"group": "\d+"}) 
    * @Route("/admin/instances/{group}/reunions/{reunion}/modifier", requirements={"reunion": "\d+"}) 
    * @Method({"GET", "POST"}) 
    * 
    * @param Request $request 
    * @param Group $group 
    * @param Reunion $reunion 
    * 
    * @return Response 
    */ 
public function newEditAction(Request $request, Group $group, Reunion $reunion = null) 
{ 
    if (!$reunion) { 
     // we know we are busy with a creation 
    } 
} 

Obwohl mit diesem, die $reunion ist nie null es sei denn, die Tabelle, die die Entitäten enthält leer.

Da beide Entitäten Group und Reunion miteinander verwandt sind (siehe unten), scheint Symfony automatisch nach der ersten Reunion-Entität zu suchen, die der angegebenen Group zugeordnet ist. Irgendeine Idee warum?

Reunion.php

/** 
* @var \AppBundle\Entity\Group 
* 
* @ORM\ManyToOne(targetEntity="Group", inversedBy="reunions") 
* @ORM\JoinColumn(name="reunion_group_id", referencedColumnName="group_id") 
*/ 
private $group; 

Vielen Dank für Ihre Hilfe.

+2

Warum? Dies wird eine überkomplexe Aktion erzeugen. Sie können leicht zwei Aktionen haben (jede mit ihrer eigenen Route), die nach ihren spezifischen Aufgaben zu einer dritten Aktion umleiten/eine andere Methode aufrufen, wo der gemeinsame Code liegt – kero

+0

@Kero hängt davon ab, was Ihr Code tut .. in 99% von die Zeiten, in denen ich Entitäten in einer Methode erstelle und aktualisiere und einfach handhabe, wie oder ob sie die betreffende Entität abrufen soll. Ich muss diese Aktionen selten in separaten Methoden trennen. – tftd

+1

Ja, es sollte nicht zu komplex sein. Ich muss nur überprüfen, ob mein Objekt leer ist oder nicht, ja, ich instanziiere ein neues und gebe es an das Formular weiter. Wenn das Formular übermittelt und gültig ist, überprüfe ich vor dem Fortsetzen, ob es eine ID hat. Aber ich stimme auch der Tatsache zu, dass zwei Methoden manchmal auch nützlich sein können. Aber um meine Frage zu beantworten, was auch immer die Methode, die ich verwende, wissen Sie, warum Symfony so mit dem Typhinweis reagiert? – mentinet

Antwort

0

Sie sollten zwei verschiedene Routen haben. Eine für die Erstellung, die nur POST-Anfragen akzeptiert, die andere für die Bearbeitung, die PUT- oder PATCH-Anfragen akzeptiert.

Verwandte Themen