版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loophome/article/details/84107818
一、注册模块路由
路由名称 | 请求方式 | 方法实现 |
/register | GET | 注册页面 |
/register | POST | 实现注册功能 |
二、控制器解析
控制器仅仅实现配置的功能,大部分的逻辑使用trait引入。因此,如果需要定制功能的话,需要重写trait。对于简单的网站来说,默认的功能已经足够了。
$redirectTo配置,如果在登录状态,重定向的页面
protected $redirectTo = '/home';
validator方法和create方法定义了验证和提交的字段
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:6', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
三、扩展开发:自定义注册字段
在实际业务中,我们可能需要更多的字段,那么如何扩展呢?
我这里调整一下,email字段改为非必填(如果填了需要验证合法性和唯一性),新增加一个phone字段非必填(如果填了需要验证合法性和唯一性)
需要改动的地方:
1)auth/register.blade.php模板,需要增加phone字段,并将email,phone表单中的require去掉。
2)RegisterController我们需要改动validator和create方法
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'min:6', 'max:64'],
'email' => ['nullable', 'string', 'email', 'max:64', 'unique:users'],
'phone' => ['nullable', 'string', 'regex:/^[0-9]{11}$/', 'unique:users'],//这里偷懒了
'password' => ['required', 'string', 'min:6', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => Hash::make($data['password']),
]);
}
完成之后,发现phone的值没有写入到数据库中,我们需要修改App\User类,在$fillable配置中添加phone这个字段
protected $fillable = [
'name', 'email', 'phone', 'password',
];
3)注册完成后,跳转到登录页,不要自动登录
注册这个行为,是Illuminate\Foundation\Auth\RegistersUsers::register方法实现的。这个是laravel实现的包,我们在开发中不应该改动包里面的代码。RegistersUsers是一个trait,我们可以在RegisterController把这个方法覆盖掉。
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
//$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
可以看看我的demo:http://shebao.bytrees.com/login