繁体   English   中英

如何在 Laravel 6 API 中创建自定义验证规则

[英]How to create custom validation rule in Laravel 6 API

我需要使用我的自定义验证规则来验证 API 请求。

请求 Class:

这是我的请求验证规则。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class LoginRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }
    public function rules()
    {
        return [
            'username' => 'required',
            'password' => 'required'
        ];
    }
    public function messages()
    {
        return [
            'username.required' => 'The Username field is required',
            'password.required'  => 'The Password field is required'
        ];
    }
}

API Controller:

这是我的 API controller 和方法。

use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\LoginRequest;

class LoginController extends BaseController
{
    public function login(LoginRequest $request)
    {
        print_r($validatorMsg);
        die();
    }
}

无法获得错误信息。

你的代码看起来不错。 对于 AJAX 调用,将自动返回JSON响应。 请记住,如果发生验证错误,您将无法使用 controller 方法,因此在您的情况下, print_r($validatorMsg); 如果发生任何验证错误,将不会执行。

而是检查为您的请求返回的响应。 在 axios 中,您会得到如下错误:

axios.post('/your-route', data).then((res) => {
    console.log('Request succeeded.');
}).catch((err) => {
    console.log(err.response.data.errors);
});

这只是一个例子。 您应该检查为您的 API 调用返回的适当响应以捕获结果错误。

use Illuminate\Support\Facades\Validator;
use Illuminate\Http\JsonResponse; 
public function login(LoginRequest $request)
    {

$validator = Validator::make($request->all(), [
            'user_name' => 'required',
            'password' => 'required',

        ]);
        if ($validator->fails()) {

            $message = $validator->errors()->first();
        $errors=$validator->errors();
        $code='200';

        $response = array(
            'success' => false,
            'message' => $message,
            "errors" => $errors
        );

        return new JsonResponse($response, $code);
        }
}

伙计们,我解决了这个问题,这是解决方案:

public function login(Request $request)
{
    $LoginRequest = New LoginRequest;
    $validator = Validator::make($request->all(), $LoginRequest->rules(),$LoginRequest->messages());

    if($validator->fails()){
        return response()->json($validator->errors(), 422);      
    }
}

在您的 controller 中,您可以检查请求是否有验证错误,如果是,您可以发送 json 响应与您的验证错误。 试试下面的代码

public function login (Request $request) {
  if(!$request->validated()) {
     return response()->json($request->validator->messages());
  } 
}

为了在您的 API 中显示错误消息,请在LoginRequest class 中使用response()方法,因此您始终返回 JSON。 像这样的东西:

public function response(array $errors)
{
     // Always return JSON.
     return response()->json($errors, 422);
}

现在尝试提交空表单,您应该可以查看错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM