2016-05-02 14 views
1

Laravel 5.1を使用してRESTful APIを構築しています。 デフォルトルートはapiです。ユーザーは、.../api/p1/p2/.../pnと言っていいほど多くのパラメータを使ってURLサービスを作成することができます。RESTful APIの無制限パラメータを使用したLaravelルート

単一のコントローラを指すように単一のルートを作成すると、サービスは単一のコントローラで処理されます。

注:最初に、アプリケーションは、urlとデータベース内のストアドサービスを比較することによって、サービスが存在するかどうかを知る必要があります。サービス自体については、後でデータベースに問い合わせることができます。

私は、Laravel 4で*を使用することができますが、Laravel 5.1はどうですか?

私が試してみました:

Route::resource('/api/*', 'APIServiceController');をしかし、あなたはこのトリックを試すことができ、それは無制限のパラメータ

のために動作しないか、それがこの

Route::group(['prefix' => 'api'], function() { //what should I put in the closure, how can I redirect it to a single controller });

答えて

3

以下のようにあなたのルートを書く: - あなたはrouteNameを動的にしたい場合は、単に以下のように中括弧でそれを書く、コントローラに

Route::group(['prefix' => 'api'], function() { 
    // this route will basically catch everything that starts with api/routeName 
    Route::get('routeName/{params?}', function($params= null){ 
     return $params; 
    })->where('params', '(.*)'); 
}); 

リダイレクト

Route::group(['prefix' => 'api'], function() { 
    Route::get('routeName/{params?}', '[email protected]')->where('params', '(.*)'); 
}); 

を: -

Route::get('{routeName}/{params?}', '[email protected]')->where('params', '(.*)'); 

希望あなたに役立ちます:-)

+0

ありがとうございます。 'routeName'も動的に作成されるので、ルートをハードコーディングすることでルートを1つずつ定義する必要はありません。 –

+0

ソリューションをテストした後、私は 'routeName'を変数' {slug} 'に変更するので、ルート名を1つずつ定義する必要はありません –

+0

はい。 routeNameを{slug}と定義すると、その名前は動的になります。 –

2

ようにそれを行うことが可能です

Route::get('{pageLink}/{otherParams?}', '[email protected]')->where('otherParams', '(.*)'); 

routes.phpファイルの最後に 'catch all'ルートのように置いてください。

class IndexController extends BaseController { 

    public function get($pageLink, $otherParams = null) 
    { 
     if($otherParams) 
     { 
      $otherParams = explode('/', $otherParams); 
     } 
    } 

} 
+0

ありがとうございます。それは私が望むものとして働く。どのメソッドを処理するには、getからanyに変更しました。 –

関連する問題