我正在使用Laravel 5 API。我有一些方法与类似的请求参数
例如,要检查许可证状态或获取需要提供?serial=licence_serial_number
参数的设置文件。
当用户没有提供serial
参数时,我需要返回400
错误代码,当用户试图获取另一个用户的许可证信息时,我要返回403
错误代码。
组织此类请求的验证和错误处理的最佳实践是什么?
- 我应该做一个中间件来检查用户是否提供了
?serial
吗 - 或者我应该为每个方法制作一个不同的Laravel 5
FormRequest
类吗 - 或者我应该直接在控制器中验证它:
if (..) {return response()->json([..], 400);}
$request->wantJson(),带有Header Accept=application/json的请求将告诉Laravel返回json验证错误,而不是返回错误
中间件可能是最好的选择,但您也可以使用Request方法。内联验证是一种糟糕的做法,因为它忽略了编程的最基本规则——不要重复自己。
如果你决定使用请求选项,你不应该为每个类创建authorize
方法,而是创建一个父类,它将处理这个问题,而其他子类将只有rules
方法。
这取决于一些实际情况:
如果你总是对所有请求验证相同的东西:使用中间件解决方案。
但是,如果一些或多个请求验证了不同的东西,那么我建议使用Laravel的新FormRequest。
它完美地处理了请求的验证,还允许您定义每个请求的错误响应。
中间地带也是一种选择,让中间件始终验证需要验证的东西。和FormRequest来处理变量验证。
如果您有类似的FormRequest,请考虑像优秀的SOLID程序员一样使用继承来防止代码重复:-)