2016-08-11 3 views
4

Ich habe folgende in meinem routes.php:Wie gruppiert man mehrere Routen mit der gleichen Controller-Methode?

Route::get('test/foo', '[email protected]'); 

Route::get('test/bar', '[email protected]'); 

Route::get('test/baz', '[email protected]'); 

und ich versuche, dies auf die folgenden zu reduzieren:

Route::get(either 'test/foo' or 'test/bar' or 'test/baz', '[email protected]'); 

One documented approach die Art hier gelten würde, ist eine Regex Einschränkung zu platzieren auf der Route:

Route::get('test/{uri}','[email protected]')->where('uri', 'regex for foo, bar, and baz...'); 

Allerdings würde diese Lösung hässlich. Gibt es nicht eine elegante Möglichkeit, einfach auszudrücken

in Laravels Sprache? Wie sieht die Regex sonst aus?

Danke!

P.S. Ich habe gelesen this, aber es galt nicht für meinen Fall mit 3 Routen.

+0

Sehr einfache Frage hier, ich sehe nicht, warum die Lösung nicht dokumentiert ist. – Alex

+0

Wenn Sie glauben, dass es dokumentiert werden sollte (besser oder überhaupt), nichts hält Sie davon ab, eine Pull-Anfrage einzureichen :) – Chris

Antwort

6

Ich bin nicht sicher, warum Sie gesagt haben, dass RegExr hässlich ist. Ich denke grundsätzlich, dass es eines der mächtigsten Werkzeuge ist.

Für Ihren Fall denke ich, die folgenden Code-Schnipsel den Job tun sollten:

Route::get('user/{name}', function ($name) { // }) ->where('name', '(foo|bar|baz)');

Die (foo|bar|baz) RegExr eines dieser Zeichenfolge übereinstimmen: 'foo', 'bar', 'baz'. Wenn Sie also mehr benötigen, fügen Sie einfach den vertikalen Balken hinzu und fügen Sie die benötigte Zeichenfolge hinzu.

+1

Es sollte, @Alex. Wie in deiner Frage, willst du das: 'Route :: get (entweder 'test/foo' oder 'test/bar' oder 'test/baz', 'TestController @ index');'. Wenn Sie also hier einen Platzhalter suchen möchten, müssen Sie nach dem obigen Snippet einen weiteren Eintrag in Ihrer route.php hinzufügen. – haitran

+0

Danke, das habe ich gerade gemerkt! – Alex

Verwandte Themen