【发布时间】: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。