登録フォーム表示
ルーティング定義
ルーティングファイルにAuth::routes();を記述することでユーザー認証関係のルーティングが自動設定される。その中には、以下の登録フォーム表示のルーティングも含まれている。
- メソッド:GET
- URL:
register - アクション:
Auth\RegisterController@showRegistrationForm - ルート名:
register
アクション
RegisterControllerコントローラーはRegistersUsersトレイトを利用していて、その中でshowRegistrationFormアクションが定義されている。
|
1 2 3 4 5 6 7 8 9 10 |
..... use Illuminate\Foundation\Auth\RegistersUsers; ..... class RegisterController extends Controller { ..... use RegistersUsers; ..... } |
RegistersUsersトレイトのshowRegistrationForm()アクションメソッドは以下の通りで、auth.registerビューをレンダリングしている。
auth.registerビューは初期状態では存在しないので、コマンドで生成するかカスタムで作成する必要がある。
|
1 2 3 4 5 6 7 8 9 |
trait RegistersUsers { ..... public function showRegistrationForm() { return view('auth.register'); } ..... } |
フォームからのPOSTと登録実行
ルーティング定義
ルーティングファイルへのAuth::routes();の記述によって、以下のルーティングも定義される。
- メソッド:POST
- URI:
register - アクション:
Auth\RegisterController@register
アクション
showRegistrationFormアクションと同じく、registerアクションもRegisterControllerでuseされるRegistersUsersトレイトで定義されている。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
trait RegistersUsers { use RedirectsUsers; ..... 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()); } .... } |
このアクションの動作は以下の通り。
|
1 |
$this->validator($request->all())->validate(); |
- マスアサインメント
$request->all()のための$fillableはapp\User.phpモデルで定義しておく - 入力されたフィールド群を検証する
validator()メソッドで検証条件を定義validator()はRegistersUsersトレイトを利用する親元のRegisterControllersで定義
12345678910111213class RegisterController extends Controller{.....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'],]);}.....}- 戻り値の
Validatorインスタンスのvalidate()メソッドで検証実行
|
1 |
event(new Registered($user = $this->create($request->all()))); |
RegistersUsersトレイトを利用する親元のRegisterControllerのcreate()メソッドを呼んでデータ作成- その
Userインスタンスを与えて登録済みのイベント発行
|
1 |
$this->guard()->login($user); |
$user登録後にそのユーザーでログイン- ここで現れる
$this-guard()は\Illuminate\Auth\SessionGuardクラスのインスタンスを返すが、かなり深掘りしないと流れを掴めない。
|
1 2 |
return $this->registered($request, $user) ?: redirect($this->redirectPath()); |
$this->registered()は登録確認のようだが、同じトレイトで空で定義されている
1234protected function registered(Request $request, $user){//}- このため三項演算子の
false側に書かれているredirect($this->redirectPath())がreturnの戻り値となる redirectPath()はRegistersUsersトレイトでさらにuseされたRedirectsUsersトレイトで定義されていて、redirectTo()メソッドが定義されていれば実行$redirectTo属性が定義されていればそこにリダイレクト- いずれでもなければ
/homeにリダイレクト
12345678910111213namespace Illuminate\Foundation\Auth;trait RedirectsUsers{public function redirectPath(){if (method_exists($this, 'redirectTo')) {return $this->redirectTo();}return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';}}
- 初期状態ではこのトレイトの親元
RegisterControllerで$redirectToが定義されているので、この内容(RouteServiceProvider::HOME)にリダイレクトされる