2017-12-27 8 views
1

Ich habe meine UserController erstellt mit - Ressource Befehl.Laravel 5.5 Resource Controller falsch benehmen

Jetzt habe ich zwei Routen.

Route::get('user/{id}', '[email protected]'); 

Route::get('user/certificate', '[email protected]'); 

Da ich nicht Strecke :: Ressource Methode verwendet haben, sagt die offizielle Dokumentation sollte die zweite Route Aufruf nicht 1. ein auslösen. Aber in meinem Fall passiert das nicht.

OD sagt auch im Falle der Bestellung, sollte jede Route statt Ressource vor diesen deklariert werden. Das habe ich auch versucht. Es dauert mich immer noch zeigen Methode anstelle von showUserCertificate Methode. Was fehlt mir hier?

+0

Welche GENAUE Version von Laravel verwenden Sie? – lagbox

+0

5.5, PHP-Version 7.1.8 –

+0

welche Version von 5.5. genau welche Version – lagbox

Antwort

4

Natürlich trifft es immer die show Route. Es ist die erste Route, die dem angeforderten URI entspricht ... Sie haben einen Routenparameter, der in dieser Route definiert ist, so dass er mit allem übereinstimmt, das mit user beginnt und über 1 zusätzliches Segment verfügt.

user/blah 
user/anything 
user/certificate 

alle dieses Spiel user/{id}. Die erste passende Route ist diejenige, die verwendet wird. Kehren Sie die Reihenfolge dieser beiden Routen um, sodass die spezifischere zuerst angezeigt wird.

Aktualisierung: Sie müssen das Framework aktualisieren. Es wurde ein Fehler in dieser exakten Version in Bezug auf die Routensortierung eingeführt. 5.5.8 behebt es. Reference to GitHub PR to revert change

+0

Sorry, ich habe wahrscheinlich im zweiten Absatz zu erklären. Ich habe versucht, den Benutzer/{id} nach der Deklaration des Benutzers/Zertifikats zu deklarieren. Trotzdem hat es das Problem nicht gelöst. –

+0

Nun, ich kann nicht alle Routen erraten, die Sie in Ihrer Anwendung definiert haben ... so funktioniert das Routing, die erste Route, die verwendet wird, ändert sich nie ... Sie sollten Ihre Routen nicht im Cache speichern lassen, sondern löschen Route Cache incase – lagbox

+0

versuchte Clearing-Route Cache, hat nicht geholfen. Und "user/{id}" ist die einzige Route, die das Problem verursacht. Es gibt keine anderen Routen, die so etwas verursachen können. –

0

ja in diesem Szenario wird die erste Route jedes Mal aufgerufen, wenn Sie die zweite Route aufrufen. Das Zertifikat in der zweiten Route wird im ersten Controller als {id} betrachtet. stimmen meine Antwort, wenn es richtig

Route::get('user/{id}', '[email protected]'); 

Route::get('user/certificate', '[email protected]'); 

ist // Sie es Route ändern können :: get ('user/Zertifikat/{id}', '@ Usercontroller showUserCertificate');

+0

Sorry, ich habe es wahrscheinlich im zweiten Absatz nicht erklärt. Ich habe versucht, den Benutzer/{id} nach der Deklaration des Benutzers/Zertifikats zu deklarieren. Trotzdem hat es das Problem nicht gelöst. –