【问题标题】:vadliator is not working and return 200 OKvadliator 不工作并返回 200 OK
【发布时间】:2019-05-15 13:44:49
【问题描述】:

试图验证它,但它似乎没有进行验证并返回 200 OK。我不知道这是怎么回事。当我调试它时,我仍然找不到它不工作的原因。

服务类规则

protected $rules = [
        'username' => 'required|max:20|unique:users',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required',
        // **in Production **
        // 'password' => [
        //     'required',
        //     'min:6',
        //     'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/',
        //     'confirmed'
        // ],
        /**
         * Three of the five rules. 
         * English uppercase characters (A – Z)
         * English lowercase characters (a – z)
         * Base 10 digits (0 – 9)
         * Non-alphanumeric (For example: !, $, #, or %)
         * Unicode characters
         */

        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255',
        'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:5',
        'role' => 'required',

    ];

从服务类验证方法

    public function validate($user)
    {
        $validator = Validator::make($user, $this->rules);
        $validator->validate();

    }

在控制器中存储方法

 public function store(Request $request)
    {
        $validate = $this->userService->validate($request->all());

        if ($validate->fails()) {

            return response()->json(['message' => $validate->failed()], 400);
        } else {
            try {
                $user = $this->userService->createUser($request);
                return response()->json($user, 201);
            } catch (Exception $e) {
                return response()->json(['message' => $e->getMessage()], 500);
            }
        }
    }

【问题讨论】:

  • 您的目标是让您的代码在多个类文件中解耦,对吗?如果是这样,为什么不使用或请求类?这可以处理您的验证逻辑,而无需手动检查验证是否通过。如果你同意我可以指导完成它。

标签: laravel laravel-validation


【解决方案1】:

如何更改服务类中的 validate() 方法,使其返回一些内容,例如:

public function validate($user)
{
    $validator = Validator::make($user, $this->rules);

    if ($validator->fails()) {
        /* Here you can also return something like 
            return redirect('yourView')
            ->withErrors($validator)
            ->withInput();
        */
        // Or you can simply
        return false;
    }

    return true;
}

然后在控制器中你可以像这样检查它:

$validate = $this->userService->validate($request->all());

if ($validate)
{
    // Validation was successfull
} else {
    // Validation was not successfull
}

【讨论】:

    【解决方案2】:

    您不应该在服务类中验证您的请求,而是使用 Larvel 的 Custom Form Request ,它允许您指定规则,它将处理失败的情况(返回浏览器并在模板中设置 $errors 变量,或发送正确的 JSON 响应)。

    基本上你会有

    public function store(CreateUserRequest $request)
    {
        // if you reach here, validation passed.
        try {
            $user = $this->userService->createUser($request);
            return response()->json($user, 201);
        } catch (Exception $e) {
            return response()->json(['message' => $e->getMessage()], 500);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 2019-08-18
      • 2011-03-25
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      相关资源
      最近更新 更多