Laravel 5.0 如何在注册前添加自定义检查


Laravel 5.0 how to add a custom check before registration

我正在做一个Laravel项目(Laravel 5.0),遇到了一个障碍。基本上,我要做的是使只有具有特定电子邮件域(例如@gmail.com)的人才能注册。我已经浏览了几乎所有与注册有关的文件,似乎找不到在哪里添加支票。

代码非常简单:

if (substr($email,-10,10)!="@gmail.com") { 
    echo "we have an issue here";
}
现在,最好是,

它不仅会回显错误,还会将其包含在错误列表中,例如当您将名称字段留空时。

如果您知道如何执行此操作,请发布一些代码和文件以放入所述代码。

再次感谢!

附言我正在使用Laravel 5.0内置的所有默认身份验证来进行注册和登录。

您需要

做的第一件事是创建自定义验证器有几种方法可以在Laravel中创建自定义验证器,但我更喜欢这样做:

    首先创建一个自定义验证器
  1. 类,这将作为一个将来可以注册所有自定义验证器的地方,我的位于app'customs - 我创建了customs目录,因为它不存在。

    <?php namespace App'Customs;
    use Illuminate'Validation'Validator;
    class Validators extends Validator
    {
          public function validateGoodEmail($attribute, $value, $parameters)
          {
             return (substr($value,-10,10)!="@gmail.com"); 
             //return boolen - true or false
          }
    }
    
注意

:注意方法名称中的关键字validate示例validateGoodEmail,validateSex等。

  1. 更新:接下来,在app'providers中创建一个 ValidatorServiceProvider.php 并执行类似如下的操作:

    <?php namespace App'Providers;
    use Illuminate'Support'ServiceProvider;
    use Validator;
    use App'Customs'Validators;
    class ValidatorServiceProvider extends ServiceProvider
    {
          public function boot()
          {
               Validator::resolver(function($translator, $data, $rules, $messages){
                    return new Validators($translator, $data, $rules, $messages);
               });
          }
    
          public function register()
          {
          }
    }
    
  2. 在提供程序下的config/app.php中注册新创建的服务提供商

     'App'Providers'ValidatorServiceProvider',
    
  3. 要在默认的 laravel 注册过程中使用验证器,请弹出打开 app'services'Registrar.php并添加此内容

注意:在 Laravel 5.2 结帐app'http'controllers'auth'AuthController.php

use App'User;
use Validator;
use Illuminate'Contracts'Auth'Registrar as RegistrarContract;
use Mail;
class Registrar implements RegistrarContract {
    public function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|good_email|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }
}

更新:为了快速修复,您可以跳过步骤 1 - 4 并简单地修改app'services'Registrar.php如下所示:

public function validator(array $data)
{
     'Validator::extend('good_email', function($attribute, $value, $parameters){
             return (substr($value,-10,10)!="@gmail.com"); 
      });
      return 'Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|good_email|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
 }
  1. 最后要做的一件事是在resources'lang'en'validation.php中添加good_email

    'unique'               => 'The :attribute has already been tak
    'url'                  => 'The :attribute format is invalid.',
    ......                                                               
    'good_email'       => 'Sorry :attribute must end with "@gmail.com"',   
    ......
    
也许

AuthController@postRegister,它来自Illuminate'Foundation'Auth'AuthenticatesAndRegistersUsers特质。