【Laravel9 Breeze】ユーザー情報項目を追加する

## あらすじ
Laravel Breezeでユーザー情報の項目を追加する場合、以下の変更を行う必要があるようです。
1. テーブル
1. モデル
1. コントローラ
1. ビュー
1. リクエスト
1. 言語


## 環境
Windows10
PHP 8.2.4
Laravel 9.52.9

## 電話番号を追加
例として電話番号を任意項目で追加する状況とします

### [テーブル] usersテーブルに項目を追加
マイグレーションファイルを作成します。
```
$ php artisan make:migration add_phone_number_field_to_users_table
```
phone_numberカラムを追加します。
文字数最大13文字でNull許容にしています。
```diff_php:database\migrations\****_**_**_******_add_phone_number_field_to_users_table.php
return new class extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
-          //
+          $table->string('phone_number', 13)->nullable();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
-           //
+           Schema::dropColumn('phone_number');
        }
    }
};
```
マイグレーションしてテーブルに反映させます。
```
$ php artisan migrate
```

### [モデル] Userモデルの$filableに項目を追加
モデルが追加した項目を扱えるようにします。
```diff_php:app\Models\User.php
class User extends Authenticatable
{
    ...
    protected $fillable = [
        'name',
+       'phone_number',
        'email',
        'password',
    ];
    ...
}
```
### [コントローラ] RegisteredUserControllerに項目を追加
DBに登録するようにstoreメソッドへ追記します。
```diff_php:app\Http\Controllers\Auth\RegisteredUserController.php
class RegisteredUserController extends Controller
{
    ...
    public function store(Request $request): RedirectResponse
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
+           'phone_number' => ['string', 'max:13'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
        ]);

        $user = User::create([
            'name' => $request->name,
+           'phone_number' => $request->phone_number,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);
        event(new Registered($user));
        Auth::login($user);
        return redirect(RouteServiceProvider::HOME);
    }
}
```
### [ビュー] 画面にフィールドを追加
登録画面のregister.blade.phpと編集画面のupdate-profile-information-form.blade.phpにフィールドを追加します。
typeがtelで最大13文字にしています。また、入れてほしい形式をプレースホルダーで表示させています。
```diff_php:resources\views\auth\register.blade.php
<x-guest-layout>
    <form method="POST" action="{{ route('register') }}">
        @csrf
        ...
+       <!-- Phone Number -->
+       <div class="mt-4">
+           <x-input-label for="phone_number" :value="__('電話番号')" />
+           <x-text-input id="phone_number" name="phone_number" type="tel" maxlength="13" placeholder="080-XXXX-XXXX" class="block mt-1 w-full" :value="old('phone_number')" autocomplete="phone_number" />
+           <x-input-error :messages="$errors->get('phone_number')" class="mt-2" />
+       </div>
        ...
    </form>
</x-guest-layout>
...
```
```diff_php:resources\views\profile\partials\update-profile-information-form.blade.php
<section>
    ...
    <form method="post" action="{{ route('profile.update') }}" class="mt-6 space-y-6">
        @csrf
        @method('patch')
        ...
+       <div>
+           <x-input-label for="phone_number" :value="'__('電話番号')'" />
+           <x-text-input id="phone_number" name="phone_number" type="tel" maxlength="13" placeholder="080-XXXX-XXXX" class="mt-1 block w-full" :value="old('phone_number', $user->phone_number)" autocomplete="phone_number" />
+           <x-input-error class="mt-2" :messages="$errors->get('phone_number')" />
+       </div>
        ...
    </form>
</section>
```
### [リクエスト] ProfileUpdateRequestに項目を追加
これがないと変更時に更新されなくなります。
Null許容かつ正規表現で入力チェックしています。
```diff_php:app\Http\Requests\ProfileUpdateRequest.php
class ProfileUpdateRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'name' => ['string', 'max:255'],
+           'phone_number' => ['nullable', 'string', 'max:13', 'regex:/^0[-\d]{11,12}$/u'],
            'email' => ['email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)],
        ];
    }
}

```
### [言語] varidation.phpのattributesに日本語名を追記
バリデーション時に参照される項目名を追記します。
```diff_php:lang\ja\validation.php
<?php
return [
    ...
    'attributes' => [
        ...
+       'phone_number' => '電話番号',
    ],
];
```