xhu*_*lio 2 php laravel laravel-5
我有一个 Laravel 应用程序,我想将注册的用户限制为仅拥有公司电子邮件的特定目标组。我在我的Registrar.php
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'lastname' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data)
{
$result = null;
$confirmation_code = str_random(30);
$data = array_add($data, 'conf',$confirmation_code);
if(!$data['email'].ends_with(('email'), 'specificdomain.com')){
Flash::message('Welcome ' .$data["name"]. '. Thanks for registering. We have sent you a validation link in your e-mail address!');
Mail::send('emails.verify', $data, function($message) use ($data) {
$message->to($data['email'], $data['name'])
->subject('Verify your email address');
});
$result = User::create([
'name' => $data['name'],
'lastname' => $data['lastname'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'confirmation_code' => $confirmation_code
]);
}else{
$result = Flash::warning('Hi ' .$data["name"]. '. We appreciate your interest on using our System. However at the moment we offer this service only to this company!');
//break;
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
这将引发以下异常
Argument 1 passed to Illuminate\Auth\Guard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, Laracasts/Flash/Flash given.
Run Code Online (Sandbox Code Playgroud)
我不能在 else 语句中中断,因为我得到以下信息:
Cannot break/continue 1 level
Run Code Online (Sandbox Code Playgroud)
显然我必须return Users::create([....])这样做,但我必须将此块保留在 if 语句之外。如果我这样做,我将无法检查电子邮件域是否是必需的。所以我问,我怎样才能将它集成到public function validator(array $data){.....}块中?
感谢所有的帮助。
您可以在验证器规则中扩展电子邮件验证,例如:
'email' => 'required|email|max:255|unique:users|regex:/(.*)your\.domain\.com$/i',
Run Code Online (Sandbox Code Playgroud)
(或者如果您需要在正则表达式中使用管道将其作为数组传递)
然后,您可以向验证器添加一系列消息,例如:
$messages = array(
'email.regex' => 'We appreciate your interest on using our System. However at the moment we offer this service only to this company!',
Run Code Online (Sandbox Code Playgroud)
);
在您调用 Validator 的地方添加消息作为第三个参数:
// Where $rules is the array you pass on now
$validator = Validator::make($data, $rules, $messages);
Run Code Online (Sandbox Code Playgroud)
在 laravel文档中,您可以准备好有关响应的所有内容。
您不能退回 Flash。您可以使用Flash(在您的情况下)将消息放入会话中,该消息将在请求后删除。我不完全确定您如何调用 create 函数以及返回的预期结果应该是什么,但我会与此保持一致。由于您现在可以使用验证消息来解决它,因此您应该只需要显示成功消息或错误。
| 归档时间: |
|
| 查看次数: |
3098 次 |
| 最近记录: |