2016-11-18 163 views
-3

只是想知道這是否是編寫Ajax代碼與Laravel路線互動的好方法?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網址。

檢索所有客戶信息的示例。

$.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