0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Filamentユーザー画面でプロフィール編集画面を作ってみた

Last updated at Posted at 2024-10-26

前提

概要

Laravel Filamentでユーザー用の画面を作ってみたが、通常だと画面右上のアバターアイコンをクリックするとプロフィール編集できるボタンがあるんだけど、それが無いので作ってみました。
なお、ユーザー画面にログインした直後、アバターアイコンがクリックされたような状態のようで、アバターメニューが表示された状態になっていて、しかも表示位置が変です。とりあえず、この問題は後回しにします。

参考

策1

公式ドキュメントにパネルの認証機能設定に関する説明で以下の説明がありました。
簡単に機能追加できるようです。

Filament公式ドキュメント
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->login()
        ->registration()
        ->passwordReset()
        ->emailVerification()
        ->profile();
}

で、とりあえず、以下のように設定してみました。

/app/Providers/Filament/CustomerPanelProvider.php
class CustomerPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->id('customer')
            ->path('customer')
            ・・・
            ->authMiddleware([
                Authenticate::class,
            ])
            ->profile();//ここを追加
    }
}

アバターアイコンをクリックすると、こんな感じでProfileメニューが表示されました。
profile.png

で、Profileをクリックすると、こんな感じの画面が表示されました。
profile01.png

策2

公式ドキュメントには他にも以下の説明がありました。

Filament公式ドキュメント
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->profile(isSimple: false);
}

これも試してみました。

/app/Providers/Filament/CustomerPanelProvider.php
class CustomerPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->id('customer')
            ->path('customer')
            ・・・
            ->authMiddleware([
                Authenticate::class,
            ])
            ->profile(isSimple: false);//ここを設定
    }
}

アバターアイコンをクリックすると、こんな感じです。策1と同じ
profile.png

で、Profileをクリックすると、こんな感じの画面が表示されました。
profile02.png

策3

公式ドキュメントには他にも以下の説明がありました。

Filament公式ドキュメント
use App\Filament\Pages\Auth\EditProfile;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->profile(EditProfile::class);
}

これは、自分でプロフィール画面を作る感じです。
公式ドキュメントに例がありましたので、同じように作ってみました。

先ずはパネルの設定

/app/Providers/Filament/CustomerPanelProvider.php
・・・
use App\Filament\Pages\Auth\EditProfile;//ここを追加
・・・
class CustomerPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->id('customer')
            ->path('customer')
            ・・・
            ->authMiddleware([
                Authenticate::class,
            ])
            ->profile(EditProfile::class);//ここを設定
    }
}

次にプロフィール編集画面の作成

/app/Filament/Pages/Auth/EditProfile.php
<?php
 
namespace App\Filament\Pages\Auth;
 
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Pages\Auth\EditProfile as BaseEditProfile;
 
class EditProfile extends BaseEditProfile
{
    public function form(Form $form): Form
    {
        return $form
            ->schema([
                TextInput::make('username')
                    ->required()
                    ->maxLength(255),
                $this->getNameFormComponent(),
                $this->getEmailFormComponent(),
                $this->getPasswordFormComponent(),
                $this->getPasswordConfirmationFormComponent(),
            ]);
    }
}

で、
アバターアイコンをクリックすると、こんな感じです。策1、策2と同じ
profile.png

で、Profileをクリックすると、こんな感じの画面が表示されました。
策1と同じような感じですね。設定できる項目は勉強しておきます。
profile03.png

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?