【发布时间】:2018-07-02 13:41:44
【问题描述】:
我正在使用 Laravel 5.5 构建一个 Web 应用程序 + REST 服务器,以便用户可以通过 Web 界面在线访问服务或通过移动应用程序间接使用 API。
现在的目标是让相同的控制器能够利用 Laravel 内置的双重路由和 FormRequests 的自动 JSON 响应来处理 API 和直接请求。
我想的主要问题是:
- 如何在同一个控制器函数上处理 JSON(用于 API 访问)和 HTML 视图(用于 Web 访问者)响应?
- 如何管理控制器中的“资源未找到”错误并随后以所需的方式回复用户?
解决第二个问题的一种可能方法是使用“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);
}
}
【问题讨论】:
标签: php laravel rest laravel-5