エンジニア初心者がPHP/Laravelを学ぶ 仕事

会員情報登録をLaravel12でする方法

ルーティングの設定(web.php)

Route::resource('user-account', UserAccountController::class)->only(['create', 'store']);

コマンドでコントローラーを作成

php artisan make:controller UserAccountController
use App\Http\Controllers\UserAccountController;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class UserAccountController extends Controller
{
    public function create()
    {
        return inertia('UserAccount/Create');
    }

    public function store(Request $request)
    {
        $user = User::create($request->validate([
            'name'     => 'required',
            'email'    => 'required|email|unique:users',
            'password' => 'required|min:8|confirmed',
        ]));

        // Laravel 10+では自動的にハッシュされるため、この行は不要
        // $user->password = Hash::make($user->password);

        Auth::login($user);

        return redirect()->route('listing.index')->with('success', 'Account created');
    }
}
  • request->validate(...) で入力値を検証
  • unique:users は、すでに登録済みのメールアドレスを弾く
  • confirmed は、password_confirmation フィールドと一致していることを確認するバリデーション
  • Auth::login($user) で登録直後に自動ログイン

$user = User::create(...) と $user = User::make(...) の違い

User::create()
→ 「モデルの作成+保存(INSERT)」まで一気にやるメソッドです。
バリデーション済みの配列を渡すと、その内容でユーザーを作成し、すぐにデータベースに保存します。
だからこのメソッドを使うと、save()は不要です。

User::make()
→ **「モデルのインスタンスは作るが、保存はしない」**メソッドです。
まだDBに保存していない「ただのオブジェクト」を返します。
この後、save()を呼ばないとDBに反映されません。

Auth::login($user)

Auth::login($user) は、Laravel の認証機能を使って そのユーザーをログイン状態にする 処理です。
つまり、ユーザーがアカウント登録(またはログイン)した後に、ログイン済み状態にするための一行です。

具体的には何が起こっているの?
セッションにユーザー情報を保存する

Laravelは、セッションを使って「誰がログインしているか」を記録します。
Auth::login($user) を呼ぶと、その $user の情報がセッションに保存されます。
次のリクエストからはログイン状態として扱われる
例えば auth() や Auth::user() を呼ぶと、このログインした $user が取得できます。

auth()->check() は true を返します。

パスワードのハッシュ化(旧方法)

以前は以下のようにコントローラで手動でハッシュしていました。

use Illuminate\Support\Facades\Hash;

$user = User::make($request->validated());
$user->password = Hash::make($user->password);
$user->save();

$casts に 'password' => 'hashed' と書く方法(Laravel 10+の標準)

モデルのUser.phpに以下を記述する。

protected $casts = [
    'password' => 'hashed',
];

これだけでパスワードは自動的にハッシュ化されます。
Laravelの内部でAttributeのような仕組みが働いています。
こちらのほうがシンプルで推奨されている書き方です。

-エンジニア初心者がPHP/Laravelを学ぶ, 仕事