top of page
  • 執筆者の写真英伸 後

Laravel/Breeae の仕組み ~3 /registerの構成(POST)

http://[URL]/register から登録情報を入力して「登録」を押すとデータが処理されてデータベースに登録されます

 
1.Route::post('/register',

Route::postは[RegisteredUserController::class, 'store']にルーティングされています


2-2.Route::post('/register'のコントローラー

store()はcreateと異なりいろいろな仕事をしています。

①store(Request $request) はhttp://[URL]/registerからのFORMリクエストのオブジェクト変数$requestを引数にしたものです。

②$request->validate はそのオブジェクト変数$requestに対してIlluminate\Http\Requestオブジェクトが提供するvalidateメソッドを適用しています。

 この中にruleが記載されています。

③'email'のルール、'unique:'.User::classはModel/User経由でDBに参照してuniqueつまり重複していないこと、というルールです。

④'password'のルール Rules\Password::defaults() はパスワードに求められる初期ルールを定義しています。

 このルールはAppServiceProviderに登録されているべきなのですが、Breezeでは未登録の状態です。

⑤User::create() はModel\User経由でDBへのアクセスを行います。

 モデルクラスからcreateメソッドを呼ぶことで、インスタンスの作成->属性の代入(fillメソッドを実行)->データの保存(saveメソッドを実行)を

 一気に実行することができます。結果が$userに代入されます。

⑥event(new Registered($user)) イベントはリスナーとセットになっています。event() はそのイベントをアプリケーションのなかで発生させるメソッドです。

 イベントクラスはmake:eventで作成する必要があるのですが、ここではすでにIlluminate\Auth\Events\Registered に実装済のようです。

 これに対応するリスナーがどこにあるのかは不明ですが、登録通知などのメール送信がこのevent()で容易にできそうです。

⑦Auth::login($user) はAuthファサードのloginメソッドです。

 ユーザーがアプリケーションに登録した直後など、すでに有効なユーザーインスタンスがある場合に役立ちます

⑧return redirect(route('dashboard', absolute: false)) で'dashboad'に遷移します。

 'dashboad'はroutes\web.php に定義されたRoute::get('dashboard', の名称です。


route\web.php

->middleware(['auth', 'verified'])はこのRoute::get('dashboard', に'auth', 'verified'のmiddlewareを適用するということ

'auth', 'verified'はそれぞれLaravel11に組み込まれたmiddlewareクラスのエイリアス名です。


3.dashboard.blade.php と関連Blade

・dashboard.blade.php コンテンツの核をなすファイルです。子View -(A)

・layouts/app.blade.php Vが継承しているレイアウトです。親View -(B)

・layouts/navigation.blade.php (B) に挿入されるパーツです -(C)


dashboard.blade.php

特段の注意点はありません。このコンテンツがapp.blade.phpの{{ $slot }} にそのまま入ります。


app.blade.php

********************

<!DOCTYPE html>

<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>

//headの内容

</head>

<body class="font-sans antialiased">

<div class="min-h-screen bg-gray-100">

//navigation.blade.phpの中身

<!-- Page Heading -->

<header class="bg-white shadow">

<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">

//{{ $header }}にdashboard.blade.php の<x-slot name="header">

</div>

</header>

<!-- Page Content -->

<main>

//{{ $slot }}にdashboard.blade.php <x-slot name="header">以外の中身

</main>

</div>

</body>

********************


layouts/navigation.blade.php はLaravel Components 記述が満載なので、項目を改めて解説します。





閲覧数:4回0件のコメント

Comments


bottom of page