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 |
一括削除 |
ToggleTrait |
有効/無効の切り替え(disabled_at) |
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段階フローです。専用確認画面を使う場合、確認データはセッションにフラッシュ保存されます。
初期状態ではモーダルで確認するため、confirmStore 等のルートは省略されます。
【新規作成】 create →(モーダル確認)→ store ※専用確認画面: create → confirmStore → store
【更新】 edit →(モーダル確認)→ update ※専用確認画面: edit → confirmUpdate → update
【削除】 show →(モーダル確認)→ destroy ※専用確認画面: show → confirmDestroy → destroy
その他の操作:
【一覧・検索】 index / search(検索条件・ソート順はセッションで永続化)
【一括削除】 index で選択 →(モーダル確認)→ select ※専用確認画面: index → confirmSelect → select
【有効/無効】 toggle(disabled_at を null ↔ now() で切り替え)
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 ミドルウェア