Dar*_*ama 0 laravel laravel-5 laravel-response laravel-5.4
我有端点可用的 RESTful 服务。
例如,我api/main从服务器请求并获取 JSON 数据。
对于响应,我使用:
return response()->json(["categories" => $categories]);
Run Code Online (Sandbox Code Playgroud)
如何控制 URL 中响应传递参数的格式?
作为示例,我需要这个:api/main?format=json|html它适用response于控制器中的每个。
一种选择是用于Middleware此目的。下面的示例假设您将始终返回即包含数据的view('...', [/* some data */])视图。
当“格式”应该是 时json,下面的代码将返回传递给视图的数据数组,而不是编译后的视图本身。json然后,您只需将此中间件应用于可以拥有和返回的路由html。
public function handle($request, Closure $next)
{
$response = $next($request);
if ($request->input('format') === 'json') {
$response->setContent(
$response->getOriginalContent()->getData()
);
}
return $response;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此响应宏。例如在AppServiceProvider内部boot方法中,您可以添加:
\Response::macro('custom', function($view, $data) {
if (\Request::input('format') == 'json') {
return response()->json($data);
}
return view($view, $data);
});
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,您现在可以使用:
$data = [
'key' => 'value',
];
return response()->custom('your.view', $data);
Run Code Online (Sandbox Code Playgroud)
例如,如果您现在运行,GET /categories您将获得正常的 HTML 页面,但如果您运行,GET /categories?format=json您将获得 Json 响应。但是,根据您的需要,您可能需要更多地自定义它以处理例如重定向。
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |