我正在使用Laravel 5.5构建一个Web应用程序+ REST服务器,以便用户可以使用Web界面在线访问服务,也可以通过移动应用程序间接使用API。
现在的目标是让相同的控制器能够利用Laravel内置双路由和FormRequests的自动JSON响应来处理API和直接请求。
我想到的主要问题是:
第二个问题的可能方法是使用" findOrFail"然后捕捉异常,看看请求是否有一个" Accpet"标题并相应地回复,但它看起来很笨重。
以下是我正在处理的控制器的简要概述;我还没有对检索到的数据进行任何检查。
class UsersController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::all();
return UserResource::collection($users);
}
/**
* Store a newly created resource in storage.
*
* @param \Washery\Http\Request\StoreUser $request
* @return \Illuminate\Http\Response
*/
public function store(StoreUser $request)
{
User::create($request->all());
return response()->json(['message' => 'success'], 200);
}
/**
* Display the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$user = User::find($id);
return new UserResource($user);
}
/**
* Update the specified resource in storage.
*
* @param \Washery\Http\Request\UpdateUser $request
* @return \Illuminate\Http\Response
*/
public function update(UpdateUser $request)
{
User::update($request->all());
return response()->json(['message' => 'success'], 200);
}
/**
* Remove the specified resource from storage.
*
* @param \Washery\User $user
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
User::find($id)->delete();
return response()->json(['message' => 'success'], 200);
}
}
答案 0 :(得分:3)
一种方法是知道请求的来源。如果它来自移动(API请求),则返回JSON,否则返回视图。
if ($request->expectsJson()) {
return response()->json(['message' => 'success']); // No need to put 200 here.
} else {
return view('view.path');
}
您可以在此处详细了解请求API:https://laravel.com/api/5.5/Illuminate/Http/Request.html