2016-11-18 16 views
-3

これがLaravelルートとやりとりするためのajaxコードを書く良い方法であるかどうか疑問に思っていますか?単一ルートのLaravel Ajaxコントローラ

例私のアプリケーションでは、すべての顧客データをリストし、すべての国をajaxでリストする必要があります。私は3つのコントローラApiController、CustomerController、CountryControllerを持っています。

だから私のroutes.phpの中で、私はこのルート

ルートを持っている::( 'API/V1/AJAX/JSON/{クラス}/{機能}' を取得、 '\ V1 \ ApiController @ ajaxreturnjsonアピ' );

ApiController.phpでは、以下の関数を使用して、必要なデータを返すための他のコントローラ関数を呼び出すことができます。

class ApiController extends Controller 
{ 
    public function ajaxreturnjson(Request $request, $controller, $function){ 
     $input = $request->input(); 
     if($request->input('namespace') != ''){ 
      $namespace = $request->input('namespace'); 
      unset($input['namespace']); 
     }else{ 
      $namespace = 'App\Http\Controllers'; 
     } 
     $data = array(); 
     try { 
      $app = app(); 
      $controller = $app->make($namespace.'\\'.$controller); 
      $data = $controller->callAction($function, array($request)+$input); 

     } catch(\ReflectionException $e){ 
      $data['error'] = $e->getMessage(); 
     } 
     return response()->json($data); 
    } 
} 

ですから、例えば、AJAXを使用するために、私はAjaxのURLにクラス名、名前空間とも関数名を渡す必要があります。

すべての顧客情報を取得する例。

$.ajax({ 
    dataType:"json", 
    url:"api/v1/ajax/json/CustomerController/getList", 
    data:"namespace=\\App\\Http\\Controllers\\", 
    success:function(data){ 

    } 
}) 

このように、私は別のAjaxリクエストに対して非常に多くのルートを作成する必要はありません。

これがセキュリティ上の問題を引き起こすかどうか、またはこれが悪い設計であるかどうかはわかりません。

+0

あなたの質問を 'codereview'に載せてください。 – linuxartisan

答えて

1

個人的には、私はこのようにはしません。確かに、になりますが、これはあまり意味がなく、デバッグすると苦痛になります。

また、他の誰かがプロジェクトの作業を開始した場合、ルートファイルを見ると、アプリの構造や場所を知ることができません。

私はそれがそれぞれのためにコントローラを持つ方がよいと思います。

+2

誰がこの回答を選んだのですか?可読性は正当な懸案事項です。これをupvoteします。 – Ronald

関連する問題