【问题标题】:Laravel Ajax controller with single route具有单路由的 Laravel Ajax 控制器
【发布时间】:2017-04-01 20:10:15
【问题描述】:

只是想知道这是否是编写 ajax 代码与 Laravel 路由交互的好方法?

例如我的应用程序需要列出所有客户数据并通过 ajax 列出所有国家/地区。我有 3 个控制器 ApiController、CustomerController、CountryController。

所以在我的 routes.php 中我有这条路线

Route::get('api/v1/ajax/json/{class}/{function}', 'Api\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请求创建那么多路由了。

但我不确定这是否会导致任何安全问题或者这是一个糟糕的设计?

【问题讨论】:

  • 把你的问题放在codereview

标签: ajax laravel


【解决方案1】:

就我个人而言,我不会这样做。当然,您可以这样做,但它不是很语义化,调试它可能会很痛苦。

此外,如果其他人开始从事该项目,当他们查看您的路线文件时,他们将不知道您的应用程序的结构或去哪里查找内容。

我认为每个事物都有一个控制器会更好。

【讨论】:

  • 谁不同意这个答案?可读性是一个合理的问题。会赞成这个。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2023-03-13
  • 2014-08-24
  • 2018-09-06
  • 2023-03-27
相关资源
最近更新 更多