2017-05-23 1 views
1

Je suis occupé à développer une application Symfony 3.Symfony: routes multiples avec des paramètres différents avec la valeur par défaut

J'ai besoin de savoir s'il est possible d'avoir une action qui est desservi par 2 voies:

  • une avec 1 paramètre
  • avec 2 paramètres

Dans le premier cas , ce serait pour créer une nouvelle entité associée à l'entité donnée. Dans le second cas, il s'agirait d'éditer une entité existante et donnée, qui est associée à une autre entité donnée.

Si ce n'est pas clair, voici mon exemple:

/** 
    * @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 
    } 
} 

Bien que, avec cela, le $reunion est jamais null à moins que la table qui contient les entités est vide. Comme les deux entités Group et Réunion sont liées les unes aux autres (voir la relation ci-dessous), il semble que Symfony recherche automatiquement la première entité Réunion associée au groupe donné. Une idée pourquoi?

Reunion.php

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

Merci pour votre aide.

+2

Pourquoi? Cela va créer une action de surcomplexe. Vous pouvez facilement avoir deux actions (chacune avec leur propre itinéraire), qui après leurs tâches spécifiques rediriger vers une troisième action/appeler une autre méthode, où tout le code commun se trouve – kero

+0

@kero dépend de ce que votre code fait .. dans 99% des les fois où je crée et met à jour des entités dans une méthode et gère juste comment ou si elle devrait récupérer l'entité en question. J'ai rarement besoin de séparer ces actions dans des méthodes séparées. – tftd

+1

Oui, ça ne devrait pas être trop complexe. J'ai juste besoin de vérifier si mon objet est vide ou non, oui j'instancie un nouveau et le passe à la forme. Ensuite, lorsque le formulaire est soumis et valide, je vérifie s'il a un identifiant avant de persister. Mais je suis également d'accord avec le fait que deux méthodes peuvent parfois être utiles. Mais pour répondre à ma question, quelle que soit la méthode que j'utilise, savez-vous pourquoi Symfony réagit comme ça avec l'indice de type? – mentinet

Répondre

0

Vous devriez avoir deux routes différentes. Une pour la création qui accepte les requêtes POST uniquement, l'autre pour l'édition qui accepte les requêtes PUT ou PATCH.