具有单一路线的Laravel Ajax控制器

时间:2016-11-18 04:10:04

标签: ajax laravel

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

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

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

text-transform: capitalize;

在ApiController.php中,我有以下函数来调用其他控制器函数来返回我需要的数据。

Route::get('api/v1/ajax/json/{class}/{function}', 'Api\v1\ApiController@ajaxreturnjson');  

所以使用ajax的例子,我只需要将类名,命名空间和函数名称传递给ajax url。

检索所有客户信息的示例。

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请求创建这么多路由。

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

1 个答案:

答案 0 :(得分:1)

就个人而言,我不会这样做。当然,你可以这样做,但它不是非常语义和调试它可能是一种痛苦。

此外,如果其他人开始处理该项目,当他们查看您的路线文件时,他们将不知道您的应用程序的结构或去往何处查找。

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