【发布时间】:2019-01-24 14:07:39
【问题描述】:
在开发 RESTful API 时为 store 和 update 方法使用 laravel requests 类有什么好处?还是我必须做出自定义 Validator::make 响应?
我在修改失败请求的响应格式以遵循一些开发标准要求时遇到了困难。
我们可以从 API 的请求类修改失败的响应格式吗?
【问题讨论】:
-
你能告诉我们你试过的几行代码吗
在开发 RESTful API 时为 store 和 update 方法使用 laravel requests 类有什么好处?还是我必须做出自定义 Validator::make 响应?
我在修改失败请求的响应格式以遵循一些开发标准要求时遇到了困难。
我们可以从 API 的请求类修改失败的响应格式吗?
【问题讨论】:
我更喜欢使用请求类中的独立,因为至少有一个好处:更清晰的代码。
您可以根据需要生成响应(这是我的解决方案,也许有更多更好的解决方案。我使用此解决方案仅返回一个验证错误而不是全部。您可以根据需要进行修改):
在你的表单请求类中添加这个方法:
protected function failedValidation(Validator $validator)
{
$this->validator = $validator;
foreach ($validator->messages()->getMessages() as $key => $value) {
$first_messages_only[$key] = $value[0];
}
throw new ValidationException($first_messages_only);
}
然后在您的异常处理程序类中,在您的 render() 方法中编写以下代码块:
if ($exception instanceof ValidationException) {
$response = [
'status' => false,
'message' => trans('api.general.validation_not_passed'), // $exception->getMessage()
'data' => ['validation_errors' => $exception->validator]
];
return response()->json($response);
}
【讨论】:
既然您在 API 开发中询问了它的用法,那么您可以通过在请求中添加 application/json 标头轻松告诉请求类您想要 json 响应,然后它将返回 json 响应。
Request 类是验证来自用户的传入输入的最佳方法,它还提供了许多其他功能。
在 Request 类中,您可以为所有请求类型编写验证规则,例如获取、发布、放置|修补或删除
您可以根据您的项目逻辑使用授权方法允许或禁止任何人。
您可以编写自定义消息并向他们发送自定义错误消息包。
如果您在控制器方法中编写整个内容,那么这将不是一个好方法并且难以管理,而请求类只会让您在处理验证时感到舒适。
protected $errorBag = 'custom_errors_bag'
public function authorize()
{
return true; //or any other logic here to authorize the user
}
public function rules()
{
switch ($this->method()){
case 'POST':
return [
'username' => 'required|string|max:20|unique:users',
//...
];
case 'PUT':
case 'PATCH':
return [
'username' => 'required|string|max:20|unique:users,id',
//...
];
case 'DELETE':[
'id' => 'required'
//...
];
default:break;
}
}
public function messages()
{
return [
'username.required' => 'Please provide username',
'username.unique' => 'Username must be unique',
//...
];
}
【讨论】: