最近、Laravel のスターターキットに「Fortify」が使われるようになりました。二段階(二要素)認証が可能になり、セキュリティ的に嬉しい変更です。
ただ、バリデーションエラー時に入力値が消える問題を確認したので、対策を記事にしておきますね。

本記事は2025年11月6日現在に書きました。今後のアップデートによってコードや構成が変更される可能性があります。
Laravel × Livewireスターターキットでユーザー登録時に「入力値が消える」問題
ユーザー登録画面(/register)で、バリデーションエラー時に、値が消えてしまいます。

原因:old() が使われていない
原因としては、バリデーションエラー時にこれまでの値を保持する「old関数」がないためです。
resources/views/livewire/auth/register.blade.phpファイルを見ると、入力欄は Livewire + Flux コンポーネントで次のように定義されています。
【register.blade.php】
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<form method="POST" action="{{ route('register.store') }}" class="flex flex-col gap-6"> @csrf <!-- Name --> <flux:input name="name" :label="__('Name')" type="text" required autofocus autocomplete="name" :placeholder="__('Full name')" /> |
以前のバージョンでは、サーバー処理も Livewire コンポーネントとして動いており、フォームの状態が Livewire 側で保持されていたため、old() が不要でした。
ですが変更後は、従来のWebルート(action=”{{ route(‘register.store’) }}”)を使った標準的なPOSTリクエストになりました。
具体的には、ユーザー登録の処理は Fortify によって提供される Action クラス(app/Actions/Fortify/CreateNewUser.php) で行われます。
そのため、old()がないと、値が保持されません。
対策:old() を追加する
解決するには、次のようにコードを追加します。
【register.blade.php】
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- Name --> <flux:input name="name" :label="__('Name')" type="text" required autofocus autocomplete="name" :placeholder="__('Full name')" {{-- ここに追加 --}} :value="old('name')" /> |

emailにも同じように、追加しておくと良いかと思います。
<flux:input>のようなBladeコンポーネントは、通常のHTMLタグのように属性を受け取ることができます 。上記の例では、value 属性に old() を指定することで、セッションから取得した古い入力値をコンポーネントに渡しています。
今後は改善されるかも?
今回の挙動は、Flux や Starter Kit 側で修正される可能性があります。
もし公式のアップデートで old() が自動反映されるようになった場合、この修正は不要になるかもしれません。
ただ、それまで困る人がいるかもしれないので、記事にしました。お役にたてば幸いです♪
-120x68.png)