Jam*_*ady 9 php validation laravel
我想将我的验证器与我的控制器分开,但 API 总是200 OK在 Postman 中响应。
请求验证:
class PostRequest extends FormRequest
{
use Types;
public function authorize()
{
return true;
}
public function rules()
{
// $auth = $this->request->user();
return [
'name' => 'required|string|max:255',
'country_id' => 'required|exists:countries,id',
'city' => 'required|max:255',
'phone_no' => 'required|regex:/[0-9]{10,13}/',
'occupation' => 'required|max:255'
];
}
}
Run Code Online (Sandbox Code Playgroud)
发件人控制器:
public function store(PostRequest $request)
{
$auth = $request->user();
$sender = Sender::create([
'name' => $request->name,
'country_id' => $request->country_id,
'city' => $request->city,
'phone_no' => $request->phone_no,
'occupation' => $request->occupation
]);
return new Resource($sender);
}
Run Code Online (Sandbox Code Playgroud)
当我发送一个没有 的请求时name,它会返回一个状态为 200 的响应。我想$validator->errors()在我忘记输入名称时显示在我的响应中。我怎样才能做到这一点?
路由和呼叫:
Route::post('sender', 'V1\SenderController@store');
POST: localhost:8000/api/v1/sender
Run Code Online (Sandbox Code Playgroud)
Tsp*_*oon 35
您应该确保使用Accept: application/json标头发送请求。
没有它 - Laravel 不会检测到它是一个 API 请求,也不会生成带有错误的 422 响应。
Md.*_*san 11
如果您向邮递员请求,请务必检查标头并设置
Accept = 'application/json'
Run Code Online (Sandbox Code Playgroud)
使用注入对象显示验证错误的正确方法FormRequest是覆盖failedValidation.
正如前面在评论部分所述,注入的FormRequest对象会自行验证请求,无需在控制器主体中再次验证它(这是它的主要好处之一)。如果验证失败,您无论如何也不会触及控制器主体。
FormRequest创建一个扩展并重写的抽象类failedValidation。
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\Response;
abstract class BaseFormRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
abstract public function rules(): array;
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
abstract public function authorize(): bool;
/**
* Handle a failed validation attempt.
*
* @param Validator $validator
*
* @return void
*/
protected function failedValidation(Validator $validator): void
{
$errors = $validator->errors();
throw new HttpResponseException(response()->json([
'errors' => $errors
], Response::HTTP_UNPROCESSABLE_ENTITY));
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以扩展BaseFormRequest所有 API 请求验证类。验证错误现在将显示为带有不可处理实体 (422) HTTP 代码的 JSON 编码消息。
来源:https://medium.com/@Sirolad/laravel-5-5-api-form-request-validation-errors-d49a85cd29f2
我通过在我的中添加更多代码解决了这个问题PostRequest.php
public $validator = null;
protected function failedValidation($validator)
{
$this->validator = $validator;
}
Run Code Online (Sandbox Code Playgroud)
我使用控制器显示错误消息
if (isset($request->validator) && $request->validator->fails()) {
return response()->json([
'error_code'=> 'VALIDATION_ERROR',
'message' => 'The given data was invalid.',
'errors' => $request->validator->errors()
]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10012 次 |
| 最近记录: |