Laravel/Lumen:验证电子邮件的数据已经存在和一般验证

Posted

技术标签:

【中文标题】Laravel/Lumen:验证电子邮件的数据已经存在和一般验证【英文标题】:Laravel/Lumen: validating data for email already exist and general validation 【发布时间】:2015-11-17 01:51:14 【问题描述】:

我正在编写一个 API。我想知道如何返回正确的响应。

数据无效(仅当电子邮件区域存在时) 数据无效(一般验证错误)

到目前为止,这是我的代码:

$data = Input::all();

$validator = Validator::make($request->all(), [
    'email'            => 'required|email|unique:users,email',
    'some_other_field' => 'required'
]);

if ($validator->fails()) 
    // NOTE: using a or b, this are my custom methods
    a) return $this->existsResponse($data);
    b) return $this->badRequestResponse($data);

我如何确定电子邮件是否已经存在?

【问题讨论】:

【参考方案1】:

您应该查看 Validator 类。我认为方法 invalid() 和 valid() 应该适合您。此方法为您返回一组键。

http://laravel.com/api/5.0/Illuminate/Validation/Validator.html#method_invalid

【讨论】:

感谢您的努力。我尝试了 invalid() 方法,这在这两种情况下都给了我电子邮件元素。但没有说明为什么元素无效。还有什么想法吗?【参考方案2】:

好吧,您正在尝试进行两种不同类型的验证,因此使用两种不同的验证器是有意义的:

$data = $request->all();

// validate email
$validator = Validator::make($data, [
    'email' => 'required|email|unique:users,email',
]);

if ($validator->fails()) 
    return $this->existsResponse($data);


// email valid, so validate other data
$validator = Validator::make($data, [
    'some_other_field' => 'required'
]);

if ($validator->fails()) 
    return $this->badRequestResponse($data);


// if here, all data is valid

【讨论】:

感谢您的努力,但这不是我的情况。不知何故,我需要确定为什么电子邮件无效。【参考方案3】:

我已经这样解决了。

public function store(Request $request)

    $data = Input::all();

    // validating data

    $validator = Validator::make($request->all(), [
        'email'            => 'required|email',
        'some_other_field' => 'required'
    ]); 

    if ($validator->fails()) 
        return $this->badRequestResponse($data);
    

    // validating if resource exists

    $userExists = User::where('email', $request->email)->count();

    if($userExists) 
        return $this->existsResponse($data);
    

    // inserting data

    $user = new User();

    $user->fill($data);
    $user->save();

    if($user->save()) 
        return $this->createdResponse($data);
    

【讨论】:

以上是关于Laravel/Lumen:验证电子邮件的数据已经存在和一般验证的主要内容,如果未能解决你的问题,请参考以下文章

用于 api 的 Laravel/Lumen 电子邮件修剪

Laravel lumen 从作曲家安装邮件

获取经过身份验证的用户 Laravel/Lumen Passport

如何在 Lumen 6x 中实现默认 Laravel 重置密码

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

使用 Laravel Lumen + Passport 获取经过身份验证的用户时出现问题