gpt4 book ai didi

php - Laravel 5.5 验证失败时验证更改响应格式

转载 作者:可可西里 更新时间:2023-11-01 00:18:34 26 4
gpt4 key购买 nike

在 Laravel 5.4 中,我们创建了一个类,我们所有的验证请求都继承了这个类,因为我们需要自定义我们的响应。

class APIRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}

/**
* Response on failure
*
* @param array $errors
* @return Response
*/
public function response(array $errors) {
$response = new ResponseObject();

$response->code = ResponseObject::BAD_REQUEST;
$response->status = ResponseObject::FAILED;
foreach ($errors as $item) {
array_push($response->messages, $item);
}
return Response::json($response);
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}

下面显示了一个扩展它的示例请求

class ResultsGetTermsRequest extends APIRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'school_id' => 'required|integer',
'student_id' => 'required|integer',
];
}
}

然后我们对失败的示例响应将是

{
"status": "FAILED",
"code": "400",
"messages": [
[
"The school id field is required."
],
[
"The student id field is required."
]
],
"result": []
}

但是,这在 Laravel 5.5 中不再有效。我注意到他们用 failedValidation 替换了响应方法。然而,当请求未被验证时,这不会返回任何响应。如果我取消对 print_r 的注释,则会返回一些内容。似乎唯一从未执行过的行是 return 语句。我错过了什么?

 public function failedValidation(Validator $validator) {

$errors = (new ValidationException($validator))->errors();
$response = new ResponseObject();

$response->code = ResponseObject::BAD_REQUEST;
$response->status = ResponseObject::FAILED;
foreach ($errors as $item) {
array_push($response->messages, $item);
}
//print_r($response);
return Response::json($response);
}

最佳答案

我猜按照 laravel upgrade指导我们应该返回 HttpResponseException

protected function failedValidation(Validator $validator)
{
$errors = $validator->errors();
$response = new ResponseObject();

$response->code = ResponseObject::BAD_REQUEST;
$response->status = ResponseObject::FAILED;
foreach ($errors as $item) {
array_push($response->messages, $item);
}

throw new HttpResponseException(response()->json($response));
}

关于php - Laravel 5.5 验证失败时验证更改响应格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47690817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com