blocs/admin: レコードのコピーと並び替え(CopyTrait / SortTrait)
blocs/admin: レコードのコピーと並び替え(CopyTrait / SortTrait)
既存レコードの複製と、ドラッグ&ドロップによるレコードの並び替え機能について説明します。
前提条件: blocs/admin がインストール済みであること
レコードのコピー機能(CopyTrait)
既存レコードを複製して新規レコードを作成する機能です。CopyTrait は Base コントローラーに含まれますが、copy ルートは自動生成されません。利用する場合はルートを手動で追加してください。
Route::post('/{id}/copy', [SampleController::class, 'copy'])->where('id', '[0-9]+')->name('copy');
処理フロー
copy ─── データのコピー
├─ getCurrent ★ ............. コピー元データ取得
├─ prepareCopy ★ ............ コピーデータの前処理
├─ executeCopy ★ ............ トランザクション内でレコード作成
└─ outputCopy ................ 完了処理
★ はオーバーライドによるカスタマイズポイントです。
メソッド一覧
| 可視性 | メソッド名 | 処理内容 |
|---|---|---|
| public | copy($id) | 指定IDのレコードをコピー |
| protected | prepareCopy() | コピーデータの前処理 |
| protected | getExcludedFieldsForCopy() | コピー時に除外するフィールドを返す |
| protected | executeCopy($requestData) | トランザクション内でレコードを作成 |
コピー時に除外されるフィールド
デフォルトで以下のフィールドがコピーから除外されます。
idcreated_atupdated_atdeleted_atdisabled_at
除外フィールドを変更するには getExcludedFieldsForCopy() をオーバーライドします。
レコードの並び替え機能(SortTrait)
表示順並び替え(ドラッグ&ドロップで order_by を更新)の機能です。一覧の カラムソート(列ヘッダーでの asc/desc 切り替え)とは別機能です(No.4.1 参照)。
ベースコントローラーの Trait ではなく、コントローラーで use SortTrait; して利用します。
処理フロー
sort ─── レコードの並び替え
├─ (並び順データの収集・検証)
├─ (order_by の更新)
└─ backIndex ................ 一覧画面へリダイレクト
オーバーライド可能なメソッドはありません。内部処理はすべてprivateメソッドで構成されています。
メソッド
| 可視性 | メソッド名 | 処理内容 |
|---|---|---|
| public | sort(Request $request) | リクエストの並び順データに基づいてレコードの order_by を更新 |
リクエストには各レコードの order_id(レコードID)と order_by(並び順の値)を含めます。
sort ルートの追加
SortTrait をコントローラーに use したうえで、以下のルートを手動で追加します。
Route::post('/sort', [SampleController::class, 'sort'])->name('sort');