2015-07-23 15 views
9

C'è un modo per aggiungere un parametro facoltativo nel mezzo di un percorso?Parametro facoltativo nel mezzo di un percorso

percorsi Esempio:

/things/entities/ 
/things/1/entities/ 

Ho provato a farlo, ma non funziona:

get('things/{id?}/entities', '[email protected]'); 

So che posso fare questo ...

get('things/entities', '[email protected]'); 
get('things/{id}/entities', '[email protected]'); 

... ma la mia domanda è: Posso aggiungere un parametro opzionale nel mezzo di un percorso?

risposta

3

No. I parametri facoltativi devono andare alla fine del percorso, altrimenti il ​​router non saprebbe come associare gli URL alle rotte. Quello che è stato implementato già è il modo corretto di fare questo:

get('things/entities', '[email protected]'); 
get('things/{id}/entities', '[email protected]'); 

si potrebbe provare a farlo con un percorso:

get('things/{id}/entities', '[email protected]'); 

e passare * o 0 se si desidera recuperare le entità per tutti cose, ma io lo definirei un hack.

Ci sono alcuni altri hack che potrebbero permetterti di usare una rotta per quello, ma aumenterà la complessità del tuo codice e non ne vale davvero la pena.

2

Avere il parametro opzionale nel mezzo della definizione del percorso in questo modo, funzionerà solo quando il parametro è presente. Si consideri il seguente:

  • quando si accede al percorso things/1/entities, il parametro id sarà correttamente ottenere il valore di 1.
  • quando si accede al percorso things/entities, perché laravel utilizza espressioni regolari che corrispondono da sinistra a destra, la parte entities del percorso sarà considerato essere il valore del parametro id (quindi in questo caso $id = 'entitites';). Ciò significa che il router non sarà effettivamente in grado di eguagliare il percorso completo, poiché lo id corrispondeva e ora si aspetta di avere una stringa finale /entities (quindi il percorso che corrisponderebbe avrebbe dovuto essere things/entities/entities, che è ovviamente non quello che cerchiamo).

Quindi dovrai seguire l'approccio di definizione del percorso separato.

Problemi correlati