在Laravel用户验证/创建中返回自定义验证错误

问题描述 投票:0回答:1

在用户创建过程中,我需要查询外部服务器以获取其他数据,如果发生故障,我需要在验证或创建时返回错误。这样做最好怎么办?以下是使用我的一些尝试注册用户的默认Laravel代码:

protected function validator(array $data)
{
    $query = queryExternalServerForAdditionalData();

    if($query->success){
      //add data from query to other user data?
      //$data['data'] = $query->data;

      return Validator::make($data, [
          'name' => 'required|string|max:255',
          'email' => 'required|string|email|max:255|unique:users',
          'password' => 'required|string|min:6|confirmed',
      ]);
    } else {
      //somehow return an error, but how?
    }
}

protected function create(array $data)
{
    // or maybe do the query and error return here?
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        // add my additional data
        // 'data' => $data['data']
    ]);
}

因此,您可以看到我的问题是如何从验证器或创建方法返回错误?我试图返回redirect()并添加了一个错误属性,但我得到一个错误,即调用validator / create的方法需要其他东西,并且返回重定向,这似乎不是一个选项。

php laravel laravel-5 laravel-5.4
1个回答
0
投票

恕我直言,最好的方法是creating form requests

public function rules()
{
    return [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users|check_server_for_additional_data',
        'password' => 'required|string|min:6|confirmed',
    ];
}

作为一个例子,我添加了check_server_for_additional_data,一个用于电子邮件字段的custom validation rule(错误消息将出现在电子邮件字段中)。

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('check_server_for_additional_data', function ($attribute, $value, $parameters, $validator) {
            return // queryExternalServerForAdditionalData()
        });
    }
}

不要忘记定义错误消息(resources/lang/LOCALE/validation.php

"check_server_for_additional_data" => "Umm ohh.. Invalid!",
© www.soinside.com 2019 - 2024. All rights reserved.