こんにちは、キャッチアップ代表の江頭です!
baserCMSで運用しやすいように独自プラグインを作成した際、管理画面が必要な場合にDBテーブルデータの管理画面を作成が面倒。と感じることはないですか?
管理画面を作成するには、baserCMSの流儀に加え、CakePHPの流儀も必要となります。ただ、GitHubで公開しているBcBakeというプラグインを使うことで、簡単にオリジナルのDBデータを管理するための管理画面を作成することができます。
最近、その方法を人に伝える機会があったので、今回はその方法をまとめたブログにしてみました。
ぜひみなさん、一度チャレンジしてみてください!
baserCMSの管理画面について
baserCMSにおける管理画面の作成は、プラグインとして作成する事を推奨しています。プラグインとして作成することで、処理が疎結合となりやすく、ファイルの管理もシンプルとなります。
また、CakePHPの bake コマンドを拡張した、BcBakeプラグインを利用することで、スケルトンのプラグインを簡単に作成する事ができ、データベーステーブルの情報からCRUDとなる管理画面をコマンド1行で作成できます。
BcBake プラグインをインストールする
プラグインのスケルトンを作成する
Dockerを利用している場合はコンテナにログインします。
docker exec -it bc-php /bin/bash
その後、次のコマンドを実行します。
bin/cake bake bc_plugin {PluginName}
plugins フォルダ配下にプラグインができている事を確認します。
この時点で管理画面よりインストールする事ができます。
データベースのテーブルを作成する
phpMyAdmin などを利用して、データベースにプラグインで管理するテーブルを作成します。
CRUDを作成する
先ほど作成したテーブルを管理するための管理画面を作成します。
CRUD(Create / Read / Update / Delete) の機能を持ちます。
次のコマンドを実行します。
bin/cake bake bc_all {table_name} -p {PluginName} --prefix Admin
プラグインの中にコントローラーやモデル、テンプレートなどが作成されている事を確認します。
サービスクラスについて
baserCMS5では、通常のMVCではなく、サービスクラスを利用して依存性の注入としてDIコンテナを利用する方針となっています。
そのため、BcBakeで作成されるファイル群もその前提で作成されていますが、サービスクラスの利用は必須ではありません。
通常のMVCでの実装でも問題ありませんが、その場合、自動生成されたファイルをMVC用に書き換える必要があります。
サービスクラスを利用して開発する
サービスクラスを利用して開発する場合は、作成したテーブル用のサービスクラスが自動生成されていますので、サービスプロバイダでそれを有効化する作業が必要となります。
次のファイルを開き、テーブルに紐づくサービスを有効化します。
次の「TableName」部分を実際のテーブル名に変更します。
また、既にそのクラスが作成されているはずですので、use 文も記載します。
// plugins/Akikawa/src/ServiceProvider/{PluginName}ServiceProvider.php
protected array $provides = [
TableNameAdminServiceInterface::class,
];
public function services($container): void
{
$container->defaultToShared(true);
$container->add(TableNameAdminServiceInterface::class, TableNameAdminService::class);
}
管理画面を表示する
次のURLにアクセスし管理画面を表示します。
作成したテーブル用の一覧画面が表示されている事を確認します。
https://{hostname}/baser/admin/{plugin_name}/{table_name}/index
ヘルプを作成する
次のパスにファイルを配置するとヘルプとして読み込む事ができます。
/plugins/{PluginName}/templates/Admin/element/help/{help_name}.php
ヘルプを読み込みたい画面のテンプレートで次のメソッドを記述します。
$this->BcAdmin->setHelp('help_name');
検索UIを作成する
次のパスにファイルを配置すると検索UIとして読み込む事ができます。
/plugins/{PluginName}/templates/Admin/element/search/{search_name}.php
ヘルプを読み込みたい画面のテンプレートで次のメソッドを記述します。
$this->BcAdmin->setSearch('search_name');
メニューを追加する
管理画面の左側のメニューに新しいメニューを追加するには、次のファイルに設定を記述します。
/plugins/{PluginName}/config/setting.php
return [
'BcApp' => [
'adminNavigation' => [
'Contents' => [
'Orders' => [
// 表示名称
'title' => '受注管理',
// コンテンツを特定する任意の文字列を指定。「設定」内に格納する場合は、`system` を指定
'type' => 'Orders',
// リンク先URLを配列で指定
'url' => ['prefix' => 'Admin', 'plugin' => '{PluginName}', 'controller' => 'orders', 'action' => 'index'],
// サブメニュー
'menus' => [
'UsersAdd' => [
'title' => '新規登録'
'url' => ['prefix' => 'Admin', 'plugin' => '{PluginName}', 'controller' => 'orders', 'action' => 'index'],
]
]
]
]
]
]
];
既存のメニューを非表示にする
既に存在する管理画面のメニューを非表示にする場合は、先ほどの設定ファイルに次のように記述します。
return [
'BcApp' => [
'adminNavigation' => [
'Contents' => [
'Contents' => [
'disable' => true
]
],
'Systems' => [
'SiteConfigs' => [
'disable' => true
],
'Sites' => [
'disable' => true
],
'Theme' => [
'disable' => true
],
'Utilities' => [
'disable' => true
],
]
]
]
];
設定ファイルについて
setting.php では、baserCMSのコアで定義されている様々な設定を上書きすることができます。
コアで定義されている設定は次のファイルとなります。
/vendor/baserproject/baser-core/config/setting.php
非表示にしたいメニューを特定するキーを探す場合にもこちらを参照ください。
まとめ
というわけで、BcBake プラグインを利用すると、独自のテーブルを管理するためのプラグインを簡単に作成する事ができます。もっとプラグイン開発についての情報が欲しい場合は、baserCMS公式ガイドの 独自のプラグインを作成する をご覧ください。