2017-11-02 4 views
0

Ich habe 2 Routen in meinem web.phpSchalter Route in web.php Laravel

1) Route::get('/{url}', '[email protected]');

die url bieten:

  • /Menü

2) Route::get('/{name}', '[email protected]')->name('promotiondetail');

die URL angeben:

  • /Menü (andere Seite aber denselben Namen in Route 1)
  • /Essen

I 2 Route verwenden, wenn route = gleichnamige I Route 1 Dont 1, wenn Route verwenden möchten have url Es wird Route 2 verwendet. In web.php ihre ohnehin ist so etwas wie

if(Route::get('/{url}', '[email protected]')) is null use 

`Route::get('/{name}', '[email protected]')->name('promotiondetail');` 

jetzt in meinem web.php ich tun, um diese

Route::get('/{url}', '[email protected]'); 
Route::get('/{name}', '[email protected]')->name('promotiondetail'); 

zu tun, wenn ich gehen/Essen Es Seite gehen nicht gefunden.

UPDATE

In meinem Controller versuche ich diese

try { 
    // if find url 
} 
} catch (\Exception $e) { 
    //if not find url 
    return redirect()->route('promotiondetail', $url); 
} 

und es zurückgeben Fehler Sie zu oft umgeleitet

UPDATE 3

$ url = Nahrung

Antwort

2

Ihr Problem ist, dass wenn Sie

Route::get('/{url}', '[email protected]'); 
Route::get('/{name}', '[email protected]')->name('promotiondetail'); 

Sie die gleiche Anfrage haben, weil {url} oder {name} optionale Parameter sind und was passiert, ist, dass es immer der erste Fall übereinstimmen .Die beste Lösung für Sie kann mit diesem Teil des Codes sein:

Route::get('/menu', '[email protected]'); 
Route::get('/{name}', '[email protected]')->name('promotiondetail'); 

Sie immer das mit nur optionalen Parametern haben sollte zuletzt, weil sonst wird es immer zuerst ausgeführt werden, da es passend wird. Und was Sie sich merken sollten ist, dass mit /{name} alles zusammenpasst, es ist wie eine Variable und kann eine Zahl enthalten, es kann auch eine Zeichenfolge sein, zum Beispiel könnte eine URL domain/{anything} sein. Wenn Sie /name verwenden, wird es nur übereinstimmen, wenn Sie domain/name als Anforderung haben.

Sie könnten Laravel routing für weitere Informationen zum Routing lesen.

+0

gut warten., Ist es nicht möglich, {url}, {name} richtig zu verwenden? – test1321

+0

Wenn du {url} und {name} verwendest, wird es immer mit dem ersten Fall übereinstimmen, weil sie optional sind. {Url} deckt in der URL irgendein Wort oder irgendetwas ab, was du tun kannst, ist dann '/ url' '/ name' oder wenn du optionale Parameter übergeben willst, solltest du '/ name/{name}' und '/ url/{url}' –

+0

thank you =]] wählen. – test1321

1

Das Problem, das Sie haben, ist, dass beide Routen im Wesentlichen gleich sind,/{etwas}.

Sie haben ein paar Lösungen.
Zuerst sortiere deine Routen, mache sie etwas anders, damit sie nicht übereinstimmen und die Reihenfolge korrigieren.
Zum Beispiel;

Route::get('/promo/{name}', '[email protected]')->name('promotiondetail'); 
Route::get('/{url}', '[email protected]')->name('menu'); 

Ein andere Lösung, die für Sie arbeiten kann ist der promotiondetail Weg zuerst zu platzieren, und eine Überprüfung, dass für den gleichen Namen tun, wenn nicht, dann mit dem anderen Controller umleiten. Versuchen Sie also in Ihrer Indexfunktion von HomeSlideviewController etwas wie;

public function index($name) { 
    if ($name !== 'whatever you want it not to be') { 
     return redirect()->route('menu); 
    } 
    // continue 
} 
+0

danke ich denke, ich brauche die zweite, weil ich nicht will/promo/ – test1321

+0

gut ich versuche die zweite es sagte Fehlender erforderlicher Parameter/{url} Wie kann ich Parameter mit Route übergeben – test1321

+0

ich aktualisierte meine Frage – test1321

Verwandte Themen