Laravel + BLOCS: 処理フローとアーキテクチャ概要
Laravel + BLOCS: 処理フローとアーキテクチャ概要
Laravel と BLOCS を使った管理画面開発における、リクエストからレスポンスまでの処理フローを示す。ユーザー管理画面を例に説明する。
処理フロー
1. リクエスト受信(Entry Point)
public/index.phpがエントリポイント.htaccessにより全リクエストをフォワード
2. ルーティング(Routing)
routes/admin.phpでURLとコントローラーのメソッドを紐付け- ミドルウェアの適用もここで定義
- ルートはリソース的に構成される(index / create / store / show / edit / update / destroy / search / select / toggle)
3. ミドルウェア(Auth)
3層のミドルウェアスタックを通過する:
| 順序 | ミドルウェア | 役割 |
|---|---|---|
| 1 | web |
セッション、Cookie、CSRF保護 |
| 2 | auth |
認証チェック(未ログインならリダイレクト) |
| 3 | Blocs\Middleware\Role |
Menu::checkRole() でルート名と config/role.php のパターンを照合し、ユーザーのロールを検証。不一致なら403 |
4. コントローラー(Controller)
継承構造
app/Http/Controllers/Admin/UserController.php が vendor/blocs/admin/controllers/Base.php を extends する。
並び替え(SortTrait)は Base に含まれず、必要なコントローラーで use SortTrait; して利用する(詳しくは No.5.6 を参照)。
Base コントローラーの構成(Trait)
Base は以下の10個の Trait で構成される:
| Trait | 機能 |
|---|---|
CommonTrait |
keepItem, getCurrent, mergeTable, setupMenu 等の共通ユーティリティ |
BackTrait |
リダイレクト・フラッシュメッセージ |
StoreTrait |
新規作成(create / confirmStore / store) |
UpdateTrait |
更新(edit / show / confirmUpdate / update)、競合検出。show は削除対象表示にも使用 |
DestroyTrait |
削除(confirmDestroy / destroy) |
SelectTrait |
一括削除(カスタマイズは No.4.5) |
ToggleTrait |
有効/無効の切り替え(disabled_at)(カスタマイズは No.4.5) |
CopyTrait |
データ複製(copy ルートは自動生成されないため、利用時は手動で定義) |
FileTrait |
ファイル操作 |
LogTrait |
ログ記録 |
コントローラーの初期化
__construct() で以下のプロパティを設定する:
$this->viewPrefix = 'admin.user'; // ビューのプレフィックス
$this->mainTable = 'App\Models\Admin\User'; // 対象モデル
$this->loopItem = 'users'; // ビューでのループ変数名
$this->paginateNum = 20; // 1ページの表示件数
$this->noticeItem = 'email'; // 通知に表示する項目
$this->val
$this->val はビューに渡すデータの中心的なコンテナ。以下を格納する:
- フォーム入力値
- クエリ結果(一覧、ページネーション)
- セッションから復元した検索条件・ソート順
- UI用メタデータ(メニュー、パンくず、見出し等)
カスタマイズ方法
各 Trait のメソッドをコントローラーでオーバーライドして独自処理を追加できる:
prepareStore()/prepareUpdate()— 保存前のデータ加工(例: パスワードのハッシュ化、ロールの結合)prepareIndexSearch()— 検索・ソートのカスタマイズvalidateUpdate()— バリデーションの追加(例: 旧パスワードの確認)
5. CRUD操作と2段階確認パターン
作成・更新・削除は モーダル確認(デフォルト)または 専用確認画面(任意)の2段階フローです。専用確認画面を使う場合、確認データはセッションキー {viewPrefix}.confirm にフラッシュ保存されます(登録・更新・削除・一括削除で共通。詳しくは No.4.2)。確定 POST 時はセッションがあれば validate*() をスキップしてデータを復元します。
初期状態ではモーダルで確認するため、confirmStore 等のルートは省略されます。
flowchart LR
subgraph create["新規作成"]
direction LR
c1["create"] --> c2["(モーダル確認)"] --> c3["store"]
end
subgraph create_confirm["新規作成(専用確認画面)"]
direction LR
cc1["create"] --> cc2["confirmStore"] --> cc3["store"]
end
subgraph update["更新"]
direction LR
u1["edit"] --> u2["(モーダル確認)"] --> u3["update"]
end
subgraph update_confirm["更新(専用確認画面)"]
direction LR
uc1["edit"] --> uc2["confirmUpdate"] --> uc3["update"]
end
subgraph destroy["削除"]
direction LR
d1["show"] --> d2["(モーダル確認)"] --> d3["destroy"]
end
subgraph destroy_confirm["削除(専用確認画面)"]
direction LR
dc1["show"] --> dc2["confirmDestroy"] --> dc3["destroy"]
end
その他の操作:
flowchart LR
subgraph index_search["一覧・検索"]
direction LR
i1["index / search(検索条件・ソート順はセッションで永続化)"]
end
subgraph bulk_delete["一括削除"]
direction LR
b1["index で選択"] --> b2["(モーダル確認)"] --> b3["select"]
end
subgraph bulk_delete_confirm["一括削除(専用確認画面)"]
direction LR
bc1["index"] --> bc2["confirmSelect"] --> bc3["select"]
end
subgraph toggle["有効/無効"]
direction LR
t1["toggle(disabled_at を null ↔ now() で切り替え)"]
end
6. モデル(Model)
app/Models/Admin/User.phpがAuthenticatableを extendsSoftDeletesトレイト使用(論理削除)disabled_atカラムで有効/無効を管理(アクセサで 0/1 に変換)roleカラムはタブ区切りで複数ロールを格納(例:"admin\tadmin2\tintern")- Eloquent ORM を経由してデータベースにアクセス
- DB操作は
DB::transaction()でラップ(10回リトライ)
7. ビュー(View / Rendering)
resources/views/admin/user/ 配下の主なテンプレート:
| ファイル | 用途 |
|---|---|
index.blocs.html |
一覧表示(検索・ソート・ページネーション・一括操作) |
create.blocs.html |
新規作成フォーム |
edit.blocs.html |
編集フォーム |
show.blocs.html |
削除対象の表示(モーダルで削除確認) |
初期状態では登録・更新・削除の確認は モーダル で行われます。専用の確認画面(confirmStore.blocs.html 等)と対応ルートは、必要に応じて追加します(詳しくは No.4.2 を参照)。
テンプレートは BLOCS 独自の data 属性で記述する(data-val, data-loop, data-include 等)。
レスポンスとして HTML, 画像, CSS, JS などを返却する。
設定ファイル(config)
| ファイル | 役割 |
|---|---|
config/auth.php |
認証ガード・プロバイダー設定(セッション認証、Eloquentプロバイダー) |
config/role.php |
ロールごとにアクセス可能なルート名パターンを定義 |
config/menu.php |
サイドメニューの構成 |
ルートファイルの使い分け
| ファイル | 用途 |
|---|---|
routes/admin.php |
パッケージ標準の管理画面(ログイン、ユーザー管理など)。AdminServiceProvider が追加読み込み |
routes/web.php |
blocs:develop で自動生成した管理画面のルートが追記される。Laravel 標準の web ルートもここ |
自動生成ルートを編集・無効化するときは routes/web.php を、標準管理画面のルートは routes/admin.php を対象にしてください。
ディレクトリ構成と役割
public/ ... エントリポイント、静的ファイル
routes/admin.php ... 標準管理画面のルーティング定義
routes/web.php ... 自動生成管理画面のルーティング(develop 追記先)
app/Http/Controllers/Admin/ ... コントローラー(Base を extends)
app/Models/Admin/ ... Eloquent モデル
config/ ... 認証・権限・メニュー設定
resources/views/admin/ ... .blocs.html テンプレート
vendor/blocs/admin/controllers/ ... BLOCS ベースコントローラー・トレイト
vendor/blocs/admin/src/Middleware/ ... Role ミドルウェア