在开发静态API时,对 store 和 update 方法使用laravel请求类有什么好处?还是我必须做出自定义 Validator :: make 响应?
我一直难以修改失败请求的响应格式,以符合某些开发标准要求。
我们可以修改API请求类的失败响应格式吗?
答案 0 :(得分:0)
我更喜欢在请求类中使用独立,因为至少有一个好处:代码更清晰。
您可以按照自己的意愿生成响应(这是我的解决方案,也许还有更好的解决方案。我使用此解决方案仅返回一个验证错误,而不是全部返回。您可以根据需要对其进行修改):
在您的Form请求类中添加以下方法:
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);
}
答案 1 :(得分:0)
由于您询问了它在API开发中的用途,因此您可以通过在请求中添加 application / json 标头,轻松告诉请求类您想要JSON响应,然后它将返回json响应。
请求类是验证来自用户的输入的最佳方法,该方法还提供了许多其他功能。
在Request类中,您可以编写所有请求类型的验证规则,例如获取,发布,放置|修补或删除
您可以根据项目逻辑允许或禁止任何使用authorize方法的人。
您可以编写自定义消息并向其发送自定义错误消息包。
如果您用控制器方法编写全部内容,那将不是一个好方法,并且难以管理,而请求类会使您在仅处理验证时感到自在。
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',
//...
];
}