我正在做一个Laravel项目(Laravel 5.0),遇到了一个障碍。基本上,我要做的是使只有具有特定电子邮件域(例如@gmail.com)的人才能注册。我已经浏览了几乎所有与注册有关的文件,似乎找不到在哪里添加支票。
代码非常简单:
if (substr($email,-10,10)!="@gmail.com") {
echo "we have an issue here";
}
现在,最好是,它不仅会回显错误,还会将其包含在错误列表中,例如当您将名称字段留空时。
如果您知道如何执行此操作,请发布一些代码和文件以放入所述代码。
再次感谢!
附言我正在使用Laravel 5.0内置的所有默认身份验证来进行注册和登录。
做的第一件事是创建自定义验证器有几种方法可以在Laravel中创建自定义验证器,但我更喜欢这样做:
- 首先创建一个自定义验证器
类,这将作为一个将来可以注册所有自定义验证器的地方,我的位于
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等。
更新:接下来,在
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() { } }
在提供程序下的
config/app.php
中注册新创建的服务提供商'App'Providers'ValidatorServiceProvider',
要在默认的 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',
]);
}
最后要做的一件事是在
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
特质。