【发布时间】:2018-05-21 07:26:15
【问题描述】:
在 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);
}
【问题讨论】:
-
考虑到
failedValidation返回void没有什么期望使用它的任何返回值...failedValidation默认抛出异常 -
我需要做什么才能发回响应?我怎么看,我唯一的其他选择是将验证逻辑放在我试图避免的控制器中!
-
不,它根本不是唯一的选择......如果验证失败,它会抛出
ValidationException.. 该异常可以包含响应 -
这是我必须在
Handler.php中放入App\Exceptions命名空间的东西吗?我将寻找一种方法来做到这一点,但如果你有任何我可以使用的链接,请分享。
标签: php laravel validation laravel-5.5