LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-06-27

あらすじ

Laravel Breezeでユーザー情報の項目を追加する場合、以下の変更を行う必要があるようです。

  1. テーブル
  2. モデル
  3. コントローラ
  4. ビュー
  5. リクエスト
  6. 言語

環境

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許容にしています。

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に項目を追加

モデルが追加した項目を扱えるようにします。

app\Models\User.php
class User extends Authenticatable
{
    ...
    protected $fillable = [
        'name',
+       'phone_number',
        'email',
        'password',
    ];
    ...
}

[コントローラ] RegisteredUserControllerに項目を追加

DBに登録するようにstoreメソッドへ追記します。

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文字にしています。また、入れてほしい形式をプレースホルダーで表示させています。

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>
...
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許容かつ正規表現で入力チェックしています。

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に日本語名を追記

バリデーション時に参照される項目名を追記します。

lang\ja\validation.php
<?php
return [
    ...
    'attributes' => [
        ...
+       'phone_number' => '電話番号',
    ],
];
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1