blocs/admin: プロフィール編集画面のカスタマイズ
blocs/admin: プロフィール編集画面のカスタマイズ
標準のプロフィール設定画面(ProfileController)は、ユーザー管理と同じ User モデル・UpdateTrait を使いつつ、ログインユーザー自身のみを編集対象とする実装例です。
前提条件: blocs/admin がインストール済みであること(No.1.1 参照)。
構成
| 要素 | パス / クラス |
|---|---|
| コントローラー | app/Http/Controllers/Admin/ProfileController.php |
| 更新ロジック Trait | app/Http/Controllers/Admin/UserUpdateTrait.php |
| テンプレート | resources/views/admin/profile/ |
| ビュープレフィックス | admin.profile |
ProfileController は UserUpdateTrait を use し、パスワード変更・role 集約などの共通処理を共有します。
ユーザー管理との違い
| 項目 | ユーザー管理 | プロフィール |
|---|---|---|
| 編集対象 | URL の $id |
常に Auth::id() |
| role 変更 | 可 | 不可(prepareUpdateTrait で除去) |
| 更新後の遷移 | 一覧へ backIndex |
ホームへリダイレクト |
| 見出し | setupMenu() 標準 |
Menu::headline() でプロフィール固定 |
public function edit($id)
{
return parent::edit(Auth::id());
}
UserUpdateTrait の主な処理
パスワード変更
password_newが空ならパスワード検証・更新をスキップ- 変更時は
password_oldをpassword_verify()で検証 - 新パスワードは
bcrypt()してpasswordカラムへ保存
role(複数 checkbox)
role[] 配列をタブ区切り文字列に変換して保存します(ユーザー管理と同じ形式)。
name の補完
name が空の場合は email を代用します。
ProfileController 固有のカスタマイズ
role フィールドの除外
protected function prepareUpdateTrait(&$requestData)
{
unset($requestData['role']);
// プロフィール画像 file の整形...
}
プロフィール画像(ai-upload)
file が空文字で送信された場合は null(削除)、値がある場合はそのまま保存します(No.5.5 参照)。
更新完了後の遷移
protected function outputUpdate()
{
return redirect()->route('home')->with([
'category' => 'success',
'message' => lang('success:admin_profile_updated'),
]);
}
カスタマイズのヒント
- バリデーション追加:
UserUpdateTrait::validateUpdate()をオーバーライド(parent::validateUpdate()後に追記) - 保存データ加工:
prepareUpdateTrait()をオーバーライド - テンプレート:
admin/profile/edit.blocs.htmlを編集(No.4.2 の編集画面カスタマイズと同様)
自分用の設定画面を別途作る場合は、本実装をコピーして viewPrefix とルートを変更するのが最短です。