我的Laravel应用程序(许多路线)中有一些路线
我想添加新功能,以JSON格式返回所有数据。现在数据只是视图。
/ ROUTE1 /选项 /路径2 /选项
等
我想拥有
/ JSON / ROUTE1 /选项 / JSON /路径2 /选项
所以,如果我现有的路由获得前缀/ json,则应该使用JSON返回数据。
我的路线看起来像Laravel中的正常路线
Route::get('user/{id}', function($id) {
$user = ....
return view('userprofile', $user);
});
如何更改此以了解请求json格式? 应该是单独的路由组,再次描述每条路由吗?
答案 0 :(得分:0)
假设Laravel 5.2:
https://laravel.com/docs/5.2/routing#parameters-optional-parameters
Route::get('user/{id}/{format?}', function($id, $format = null) {
$user = ....
if($format == 'json') {
return response()->json($user);
}
return view('userprofile', $user);
});
答案 1 :(得分:0)
在我看来,实现这一目标的最佳方法是让客户选择他们想要的东西。这通常使用Accept标头来实现。
GET myapp.com/user/1 HTTP/1.1
Accept application/json
在Laravel中编写应用程序时,此方法很好,因为如果通过Accept标头请求JSON,则始终会通知请求对象。
我在以下示例中使用了Laravel 5.2的隐式模型绑定。
Route::get('user/{user}', function(Request $request, User $user) {
if ($request->wantsJson()) {
return response()->json($user);
}
return view('userProfile', $user);
});
此方法可避免在网址中放入不必要的信息,从而保持API清洁。然而,许多下降的路由(包括我自己)是分离返回数据的路由和返回视图的路由。
Route::get('user/{user}', function(Request $request, User $user) {
// Standard route, return a view
});
Route::get('api/user/{user}', function(Request $request, User $user) {
// API route, always return JSON
});