2015-07-23 19 views

Odpowiedz

3

Nie. Opcjonalne parametry muszą przejść do końca trasy, w przeciwnym razie Router nie wiedziałby, jak dopasować adresy URL do tras. Co już realizowane jest poprawny sposób to robić:

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

Można spróbować zrobić to z jednej trasy:

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

i przekazać * lub 0 jeśli chcesz pobrać podmioty dla wszystkich rzeczy, ale nazwałbym to włamaniem.

Istnieje kilka innych hacków, które mogą pozwolić na użycie jednej trasy do tego, ale zwiększy to złożoność kodu i naprawdę nie jest tego warte.

2

Posiadanie opcjonalnego parametru w środku definicji trasy w ten sposób działa tylko wtedy, gdy parametr jest obecny. Rozważmy następujący:

  • podczas uzyskiwania dostępu do ścieżki things/1/entities, parametr id będzie poprawnie uzyskać wartość 1.
  • podczas uzyskiwania dostępu do ścieżki things/entities, ponieważ Laravel używa wyrażeń regularnych pasujących od lewej do prawej, część ścieżki określona jako entities zostanie uznana za wartość parametru id (w tym przypadku $id = 'entitites';). Oznacza to, że router nie będzie w stanie dopasować całej trasy, ponieważ id został dopasowany i teraz oczekuje również na ciąg znaków końcowych /entities (aby dopasowana trasa musiała być things/entities/entities, co jest oczywiście nie to, o co nam chodzi).

Będziesz musiał przejść oddzielną definicję trasy.

Powiązane problemy