概要
RegisterController
は、Laravelのプロジェクト開始時にapp/Http/Controllers/Auth
ディレクトリー下に生成される。
ルーティングファイルにAuth:routes()
を記述することで、このコントローラーの各アクションは以下のようにURLと結び付けられる。
method | URL | action | name |
GET | /register | showRegistrationForm | register |
POST | /register | register |
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use App\User; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; class RegisterController extends Controller { /* |-------------------------------------------------------------------------- | Register Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users as well as their | validation and creation. By default this controller uses a trait to | provide this functionality without requiring any additional code. | */ use RegistersUsers; /** * Where to redirect users after registration. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * 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:8', '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']), ]); } } |
内容
コントローラーの機能
ソースコード冒頭のコメントの要旨は以下の通り。
- このコントローラーは、新規ユーザーの登録、入力バリデーション、データ作成とともに行う
- デフォルトではこの機能を
Illuminate\Foundation\Auth\RegistersUsers
トレイトで実装し、追加のコードなしで上記の機能を提供
RegistersUsersトレイトの導入
1 |
use RegistersUsers; |
登録後の遷移先
1 |
protected $redirectTo = RouteServiceProvider::HOME; |
登録後の遷移先を設定している。
コントローラーの生成
1 2 3 4 |
public function __construct() { $this->middleware('guest'); } |
コントローラー生成時のコンストラクター。
入力バリデーション
メールアドレスをユーザーIDとして使うため、入力バリデーションでemail
にunique
の制約をかけている。
1 2 3 4 5 6 7 8 |
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:8', 'confirmed'], ]); } |
Userモデルインスタンスの作成
ユーザー登録時、パスワードにHash()
メソッドを適用して暗号化している。
1 2 3 4 5 6 7 8 |
protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); } |