2016-11-18 127 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