2016-04-30 21 views
2

bietet Was ich versuche zu erreichen ist, habe ich eine Route, die einen Parameter mit dem Namen type akzeptiert und Es akzeptiert jeden Wert jetzt. Aber ich möchte Auswahlmöglichkeiten zur Verfügung stellen, um Werte zu akzeptieren, wenn Übereinstimmungen mit der Route funktionieren, andernfalls wird Nicht gefundener Fehler ausgegeben.Wie man Optionen für Laravel Route Parameter

Zur Wahl stehen:

  1. retweet
  2. Lieblings
  3. tweet

Code:

Route::get('/activity/{type}/status','[email protected]'); 

ActivitiesController.php

class ActivitiesController extends Controller 
{ 
    public function status($type, Request $request) 
    { 
     return $request->all(); 
    } 
} 

Antwort

2

Sie können wie reguläre Ausdrücke Constraints:

Route::get('/activity/{type}/status','[email protected]') 
    ->where('type', '(retweet|favorite|tweet)'); 
+0

Danke Mann, das ist genau das, was ich gesucht habe. –

0

Dies wird die $type überprüfen. Wenn es nicht angebracht, eine ist, wird es redirect to 404 error page:

public function status($type, Request $request) 
{ 
    if ($type != 'retweet' && $type != 'favorite' && $type != 'tweet') { 
     abort(404); 
    } 

    return $request->all(); 
} 

Alternative:

Route::get('/activity/{type}/status', function() 
{ 
    if ($type == 'retweet' || $type == 'favorite' || $type == 'tweet') { 
     $app = app(); 
     $controller = $app->make('ActivitiesController'); 
     $controller->callAction($app, $app['router'], 'status', $parameters = array()); 
    } 
}); 

Alternative 2:

Nur wenn Sie nur 3 Arten haben und Sie werden jede nicht hinzufügen in der Zukunft. Das ist dumm ein, aber besser lesbar und leichter zu pflegen:

Route::get('/activity/retweet/status','[email protected]'); 
Route::get('/activity/favorite/status','[email protected]'); 
Route::get('/activity/tweet/status','[email protected]'); 

Auch konnte man use middleware. Es ist deine Entscheidung.)

+0

ich auf diese Weise wissen, aber ich möchte Anfragen auf dem Routen-Website filtern, weil ich andere Funktionen haben auch die Post-Anfragen an den gleichen Weg Syntax machen und ich nehme den '$ type' Parameter von ihnen, und wenn ich diesem Muster folge, muss ich die Überprüfungen in jede Funktion setzen. –

Verwandte Themen