RegisterController创建方法重定向,并在Laravel 5.4中显示错误消息

时间:2017-05-23 11:50:10

标签: laravel-5 laravel-5.4

将用户重定向到注册页面,错误消息用户已存在。

我不能将验证用作类型电子邮件,因为我在创建代码中手动添加组织名称@ organization.com,我阻止用户输入@ organization-name.com。目前验证只检查电子邮件值是否已填写。因此,我需要在create方法中使用一些策略来查明电子邮件是否存在,并在此处采取适当的操作重定向错误或重定向到登录页面,说明用户存在​​

这是我在Register Controller中的代码 - 创建方法

public function create(array $data)
{   

    $firstname = Input::get('firstname');
    $lastname  = Input::get('lastname');
    $username     = Input::get('email');
    $email = $username."@hw.ac.uk";
    //I need to do a check if this new user exists or not. 
    //If not go to Login page saying message user exists.
    $digits = 5;
    $new_code = rand(pow(10, $digits-1), pow(10, $digits)-1);

    $user = new User;
    $user->firstname             = $firstname;
    $user->lastname              = $lastname;
    $user->email                 = $email;
    $pswd                         = bcrypt(Input::get('password'));
    $user->password              = $pswd;

}

}

but when I register new user for the first time and re-register the same user with all different info but same email address. I get this error:

    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test@gmail.com' for key 'users_email_unique' (SQL: insert into `users` (...))

I know its a duplicate entry but I want to redirect user to login page and tell that user already exists with this email. How do I do that? 

我用过这个:

$existing = User::select('email')->where('email',$email)->pluck('email');
        if($existing[0] == $email){

            return Redirect()->back()->withErrors('User already exists');
        }else{
            //continue
        }

但是我得到了会话保护错误。

1 个答案:

答案 0 :(得分:2)

您获得的例外情况是添加具有相同电子邮件的新用户(根据您的迁移,该用户是唯一的)。在创建user之前,您可以先检查它是否已存在。

$user = User::where('email', '=', 'user_email')->first();
if($user == null)
{
  //Add new user
}else { 
 return redirect()->route('someroute');
}