2016-04-30 7 views
2

私が達成しようとしているのは、typeという名前のパラメータを受け入れるルートがあり、現在は任意の値を受け入れます。しかし、私は値を受け入れるための選択肢を提供したい、ルートが一致すればそれ以外の場合は、エラーが見つかりません。Laravelルートパラメータの選択肢を提供する方法

選択肢は以下のとおりです。

  1. リツイート
  2. 好きな
  3. つぶやき

コード:

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

ActivitiesController.php

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

答えて

2

あなたが好きな正規表現の制約を使用することができます。私はこの方法を知っている

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

ありがとう、これは私が探していたものです。 –

0

$typeを確認します。それは適切なものでないなら、それはredirect to 404 error pageます:

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

    return $request->all(); 
} 

オルタナティブ:

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()); 
    } 
}); 

はオルタナティブ2:

あなただけの3種類があり、いずれかを追加しない場合にのみ将来は。これは、維持するために1愚かな、しかし、より読みやすく、簡単です:

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

また、あなたがuse middlewareをできました。選択はあなた次第です。 )

+0

が、私は同じルート構文にポスト要求を行う、あまりにも他の機能を持っているので、私は、ルートサイト上の要求をフィルタリングします'$ type'パラメータを取得します。このパターンに従えば、すべての関数にチェックを入れなければなりません。 –