2016-12-08 3 views
1

Ich habe dies in meinem web.php (Laravel 5,3)Laravel ausschließen Route

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Ich möchte die Urls /perfil/mis-hoteles und /profile/my-properties durch die erste Strecke bedient werden. Und die URLs /perfil/[whatever] und /profile/[whatever] werden von der zweiten Route bedient.

Es funktioniert nicht, /perfil/mis-hoteles wird von der zweiten Route umgeleitet.

Ich würde auch so etwas wie versucht

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)','seccion' => '^(!mis\-hoteles$)']) 

für den zweiten Weg, aber es funktioniert nicht.

Was mache ich falsch? Die seltsame Sache ist, wenn ich die zweite Route löschen und nur

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 

lassen es funktioniert, so gibt es eine Übereinstimmung. Warum, wenn es ein Match Laravel gibt, sucht weiter nach einem Match, das die zweite Route findet?

Antwort

0

Laravel mag es nicht, wenn Sie Ihre Routen die gleiche Methode und uri sring haben. Wenn Sie zwei Routen mit Methoden und uri Strings (nicht die tatsächlichen uris sie erhalten) haben, was Sie tun, es überschreibt es einfach.

Also müssen wir "Trick" es ein bisschen.

Statt dessen:

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Wir wollen "Lüge" und sagen:

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{section}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Beachten Sie die {perfil}/{seccion} und {perfil}/{section} nur diesen einen Brief Laravel sagen, dass wir don‘ Ich möchte die alte Route außer Kraft setzen.

Vergessen Sie nicht, die jeweils die akzeptierten Parameter in den Controller zu ändern.

Hoffe das löst Ihr Problem, es hat für mich getan.