Skip to main content

blocs/admin: 新規作成・編集機能のカスタマイズ

blocs/admin: 新規作成・編集機能のカスタマイズ

自動生成された管理画面の新規作成・編集機能をカスタマイズする方法を説明します。入力フォーム、バリデーション、確認画面、競合検出などを要件に合わせて調整できます。

前提条件: 自動生成ツールで管理画面を生成済みであること

テンプレートの一覧

共通テンプレートは resources/views/admin/base/entry に格納されています。

テンプレート名 用途
header.html 画面上部のヘッダー部分
footer.html 画面下部のフッター部分
include/entry.html 編集画面の共通レイアウトテンプレート
include/form.html 入力フォームの部品テンプレート
create.blocs.html 新規作成画面のメインテンプレート
edit.blocs.html 編集画面のメインテンプレート
confirmStore.blocs.html 新規作成の確認画面(任意・追加時)
confirmUpdate.blocs.html 更新の確認画面(任意・追加時)

処理フロー

初期状態では モーダル で登録・更新を確認します(詳しくは No.1.2 / No.5.4)。confirmStore / confirmUpdate ルートおよび確認画面テンプレートは自動生成に含まれません。専用確認画面を使う場合のみ、以下の「パターンB」のフローになります。

★ はオーバーライドによるカスタマイズポイントです。

新規作成フロー

パターンA: モーダル確認(デフォルト)

create ─── 入力画面表示
  ├─ prepareCreate ★ .......... 表示データ準備
  └─ outputCreate .............. 入力画面表示
      │
      ▼(モーダルで確認)
store ─── 新設処理
  ├─ validateStore ★ .......... 入力データの検証
  ├─ prepareStore ★ ........... 登録データ準備
  ├─ executeStore ★ ........... データ登録
  ├─ logStore ★ ............... ログ記録
  └─ outputStore ............... 完了処理

パターンB: 専用確認画面(任意・追加時)

create ─── 入力画面表示
  ├─ prepareCreate ★ .......... 表示データ準備
  └─ outputCreate .............. 入力画面表示
      │
      ▼
confirmStore ─── 確認画面表示
  ├─ validateStore ★ .......... 入力データの検証
  ├─ prepareConfirmStore ★ .... 表示データ準備
  └─ outputConfirmStore ........ 確認画面表示
      │
      ▼
store ─── 新設処理
  ├─ validateStore ★ .......... 入力データの検証
  ├─ prepareStore ★ ........... 登録データ準備
  ├─ executeStore ★ ........... データ登録
  ├─ logStore ★ ............... ログ記録
  └─ outputStore ............... 完了処理

編集フロー

パターンA: モーダル確認(デフォルト)

edit ─── 編集画面表示
  ├─ getCurrent ★ ............. 編集データ取得
  ├─ prepareEdit ★ ............ 表示データ準備
  └─ outputEdit ................ 入力画面表示
      │
      ▼(モーダルで確認)
update ─── 更新処理
  ├─ getCurrent ★ ............. 編集データ取得
  ├─ validateUpdate ★ ......... 入力データの検証
  ├─ checkConflict ★ .......... 衝突確認
  ├─ prepareUpdate ★ .......... 登録データ準備
  ├─ executeUpdate ★ .......... データ登録
  ├─ logUpdate ★ .............. ログ記録
  └─ outputUpdate .............. 完了処理

パターンB: 専用確認画面(任意・追加時)

edit ─── 編集画面表示
  ├─ getCurrent ★ ............. 編集データ取得
  ├─ prepareEdit ★ ............ 表示データ準備
  └─ outputEdit ................ 入力画面表示
      │
      ▼
confirmUpdate ─── 確認画面表示
  ├─ getCurrent ★ ............. 編集データ取得
  ├─ validateUpdate ★ ......... 入力データの検証
  ├─ prepareConfirmUpdate ★ ... 表示データ準備
  └─ outputConfirmUpdate ....... 確認画面表示
      │
      ▼
update ─── 更新処理
  ├─ getCurrent ★ ............. 編集データ取得
  ├─ validateUpdate ★ ......... 入力データの検証
  ├─ checkConflict ★ .......... 衝突確認
  ├─ prepareUpdate ★ .......... 登録データ準備
  ├─ executeUpdate ★ .......... データ登録
  ├─ logUpdate ★ .............. ログ記録
  └─ outputUpdate .............. 完了処理

ベースコントローラーのメソッド

新規作成関連

可視性 メソッド名 処理内容
public create 新規作成画面を表示
protected prepareCreate 出力のためのデータ処理 ★
protected outputCreate ビューの出力処理
public confirmStore 入力内容の確認画面を表示
protected validateStore 入力値のバリデーション ★
protected prepareConfirmStore 出力のためのデータ処理 ★
protected outputConfirmStore ビューの出力処理
public store 新規登録処理
protected prepareStore 出力のためのデータ処理 ★
protected executeStore データの新規登録 ★
protected outputStore ビューの出力処理

編集関連

可視性 メソッド名 処理内容
public edit 編集画面を表示
protected prepareEdit 出力のためのデータ処理 ★
protected outputEdit ビューの出力処理
public confirmUpdate 入力内容の確認画面を表示
protected validateUpdate 入力値のバリデーション ★
protected prepareConfirmUpdate 出力のためのデータ処理 ★
protected outputConfirmUpdate ビューの出力処理
public update 編集処理の実行
protected checkConflict 編集の競合(同時編集)の確認 ★
protected prepareUpdate 出力のためのデータ処理 ★
protected executeUpdate データの更新処理 ★
protected outputUpdate ビューの出力処理

ベースコントローラーの主な変数

変数名 説明
$this->request 現在のリクエスト情報。フォームの入力値やURLパラメータを取得
$this->tableData 編集対象のデータ。データベースから取得したレコード

メソッドの共有関係

ベースコントローラー内部では、以下のメソッド呼び出し関係があります。

編集画面や更新処理だけに固有のロジックを追加したい場合は、prepareEdit() / prepareUpdate() をオーバーライドし、parent::prepareEdit() / parent::prepareUpdate() を呼び出した後に追加処理を記述してください。

ログデータの自動生成

executeStore() および executeUpdate() は、処理の中で自動的に $this->logData を構築します。ログ記録のために手動で $this->logData を設定する必要はありません。

確認画面のセッションデータについて

確認画面(confirmStore / confirmUpdate)のデータは、Laravelのフラッシュデータとして保存されます。フラッシュデータは1回のリクエストでのみ有効です。ユーザーが確認画面で別のページに遷移してから戻った場合、入力データは失われます。

編集時に現在のデータを取得する方法

コントローラー内で $this->getCurrent($id) を使用します。取得したデータはフォームの初期値表示や編集前の確認に利用できます。

編集の競合確認を有効にする方法

複数ユーザーによる同時編集の競合を検出するには、テンプレート内で updated_at の値を hidden フィールドとして送信します。

<input type="hidden" name="updated_at" />

checkConflict() はリクエストに updated_at が含まれている場合のみ動作します。hidden フィールドがなければ競合チェックはスキップされます。競合が検出された場合、編集画面にエラーメッセージ付きでリダイレクトされます。

確認画面の追加方法

管理画面の初期状態では モーダル による確認が行われます(詳しくは No.5.4 を参照)。専用の確認画面を追加するには以下の手順で実装します。

1. 確認画面用テンプレートの作成

resources/views/... 配下に confirmStore.blocs.html を作成し、入力内容の表示や「登録」ボタンを配置します。

2. 確認画面を表示するルートの定義

confirmStore / confirmUpdate は POST でリクエストを受け取ります。

Route::post('/confirmStore', [UserController::class, 'confirmStore'])->name('confirmStore');
Route::post('/{id}/confirmUpdate', [UserController::class, 'confirmUpdate'])->where('id', '[0-9]+')->name('confirmUpdate');

3. 新規作成画面から確認画面へ遷移するボタンを設置

<!-- data-bloc="buttonBottomCenter" -->
<!-- :formaction=route(prefix().".confirmStore") -->
<!--
    data-include="button"
    $buttonType="submit"
    $buttonClass="btn btn-primary"
    $buttonIcon="fa-solid fa-arrow-right"
    $buttonLabel="確認"
-->
<!-- data-endbloc -->

: confirmStore / confirmUpdate ルートおよび確認画面テンプレートも、自動生成には含まれません。モーダル確認から専用確認画面へ切り替える場合に追加してください。