Skip to main content

blocs/admin: 定義ファイルの作成と管理画面の自動生成

blocs/admin: 定義ファイルの作成と管理画面の自動生成

自動生成ツールは、JSON形式の定義ファイルをもとに管理画面のコントローラー・ビュー・ルーティング・モデル・マイグレーションを一括生成します。このドキュメントでは、定義ファイルの書き方と自動生成コマンドの使い方を説明します。

前提条件: blocs/admin がインストール済みであること(No.1.1 を参照)

自動生成の実行方法

1. 定義ファイルの作成

JSON形式の定義ファイルを docs/develop/ に保存します(例: docs/develop/sample.json)。

2. Artisan コマンドの実行

php artisan blocs:develop docs/develop/sample.json

コマンド実行時に自動で行われる処理

php artisan migrate を別途実行する必要はありません。

自動生成後に利用できる基本機能

機能 メソッド(ルート名) 処理内容 テンプレート
一覧表示 index 登録データの一覧を表示 index.blocs.html
一覧表示 search 条件を指定して検索結果を一覧表示 index.blocs.html
新規作成 create 新規登録用入力画面を表示 create.blocs.html
新規作成 store 入力データを保存 なし
編集 edit 既存データを編集する画面を表示 edit.blocs.html
編集 update 編集内容を更新 なし
削除 show 削除前確認画面を表示 show.blocs.html
削除 destroy 指定データを削除 なし
ファイル操作 upload ファイルをアップロード なし
ファイル操作 download ファイルをダウンロード なし
ファイル操作 thumbnail サムネイルを表示 なし
一括削除 select 複数データの一括削除 なし
ステータス切り替え toggle データの状態を切り替え なし

定義ファイルの形式(JSON)

定義ファイルは以下の4つのセクションで構成されます。

キー項目 説明
controller コントローラーに関する設定
form 入力フォームの定義
menu メニューの表示設定
route ルーティングの設定

controller セクション

キー項目 説明
controllerName コントローラーのクラス名 Admin/SampleController
viewPrefix ビューのパス(ドット区切り) admin.sample
modelName モデルの名前 Admin/Sample
loopItem 一覧表示で使用するテーブル名 samples
paginateNum 1ページの表示件数(0でページングなし) 20
noticeItem 操作完了メッセージに使う項目名 name

controllerNamemodelNameAdmin/ プレフィックス付き(例: Admin/SampleController)を推奨します。サブ名前空間なし(例: CompanyController)も動作しますが、生成先の名前空間と一致させてください。

form セクション

フォーム名をキーとした連想配列で、各入力項目を定義します。

テキスト入力タイプ(text, textarea, datepicker, timepicker, number)

キー項目 説明 記述例
type 入力タイプ text
label 表示ラベル 名前
required 必須入力かどうか true
placeholder プレースホルダー 入力してください
disabled 入力不可にするか false
readonly 読み取り専用にするか false

選択入力タイプ(select, radio, checkbox)

キー項目 説明 記述例
type 入力タイプ checkbox
label 表示ラベル 仕事
required 必須入力かどうか true
option 選択肢(値とラベルの連想オブジェクト、またはラベルのみの配列) "1": "学生", "2": "会社員" または ["有効", "無効"]
default 初期選択値 [1, 2]

検索できるプルダウン(select2)

キー項目 説明 記述例
type 入力タイプ select2
label 表示ラベル 仕事
option 選択肢 "1": "学生", "2": "会社員"
default 初期選択値 [1, 2]
required 必須入力かどうか true
multiple 複数選択可能か true

ファイルアップロード(upload)

キー項目 説明 記述例
type 入力タイプ upload
label 表示ラベル アップロードファイル
required 必須入力かどうか true
multiple 複数ファイルのアップロード可否 true

option の記述形式

option は次の2形式のいずれかで記述します。

形式 記述例 補足
連想オブジェクト "1": "学生", "2": "会社員" value と label を明示(推奨)
配列 ["有効", "無効"] 0 始まりの連番が value として自動採番

入力タイプ一覧

type 説明
text 1行テキスト入力
textarea 複数行テキスト入力
datepicker 日付入力
timepicker 日付+時間入力
number 数値入力
select プルダウン選択
radio ラジオボタン
checkbox チェックボックス
select2 検索機能付きプルダウン
upload ファイルアップロード

menu セクション

設定項目 説明 記述例
name メニューがリンクするルート名 admin.sample.index
lang メニューに表示するラベル サンプル
icon Font Awesomeのアイコンクラス名 fa-cogs
role true にすると権限チェックをスキップして常に表示(省略時は config/role.php で権限のあるロールにのみ表示。詳しくは No.3.4) true

route セクション

設定項目 説明 記述例
routePrefix URLの共通パス admin/sample
routeName ルート名の共通プレフィックス admin.sample.

サンプル: 企業情報の管理画面

{
  "controller": {
    "controllerName": "CompanyController",
    "viewPrefix": "admin.company",
    "modelName": "Company",
    "loopItem": "companies",
    "paginateNum": 20,
    "noticeItem": "name"
  },
  "form": {
    "code": {
      "label": "証券番号",
      "type": "text",
      "required": true
    },
    "name": {
      "label": "名前",
      "type": "text",
      "required": true
    }
  },
  "menu": {
    "name": "admin.company.index",
    "lang": "企業",
    "icon": "fa-building"
  },
  "route": {
    "routePrefix": "admin/company",
    "routeName": "admin.company."
  }
}

サンプル: ソリューション管理画面(ステータス・選択肢あり)

{
  "controller": {
    "controllerName": "Admin/SolutionController",
    "viewPrefix": "admin.solution",
    "modelName": "Admin/Solution",
    "loopItem": "solutions",
    "paginateNum": 20,
    "noticeItem": "name"
  },
  "form": {
    "disabled_at": {
      "label": "ステータス",
      "type": "radio",
      "option": {
        "0": "有効",
        "1": "無効"
      },
      "default": "0",
      "required": true
    },
    "name": {
      "label": "名前",
      "type": "text",
      "required": true
    },
    "pattern": {
      "label": "パターン",
      "type": "select",
      "option": {
        "A": "パターンA",
        "B": "パターンB"
      },
      "required": true
    }
  },
  "menu": {
    "name": "admin.solution.index",
    "lang": "ソリューション",
    "icon": "fa-tag",
    "role": true
  },
  "route": {
    "routePrefix": "admin/solution",
    "routeName": "admin.solution."
  }
}

QA

入力フォームを必須項目にしたい場合

BLOCS テンプレートでは data-validate(省略記法 !name)でバリデーションを指定します(詳しくは No.2.10 を参照)。

<input type="text" name="name">
<!-- !name="required" data-lang="必須入力です。" -->
@error("name")
<div class="invalid-feedback">{{ $message }}</div>
@enderror

自動生成ルートのミドルウェア

blocs:develop が追記するルートテンプレート(develop/route.php)は ['web', 'auth', Blocs\Middleware\Role::class] を指定してください。web を省略するとセッション・CSRF 保護が効きません。