【EC-CUBE3】プラグインの設定画面を追加する方法

EC-CUBEのカスタマイズと言えば、今ではプラグインが定番かと思います。
プラグインを作る際、要件によってはプラグインの動作を設定する画面を作りたいと
思う事もあるかと思いますが、
EC-CUBE3のプラグインでは、以下のルールで設定画面へのリンクボタンが表示されるようになります。

[設定画面へのリンクを表示させる条件]
プラグインに含まれるServiceProvider.registerメソッドで
plugin_{PluginCode}_configというルーティング名を追加する。

public function register(BaseApplication $app)
{
$admin_dir = ‘/’ . trim($app[‘config’][‘admin_route’]);
$app->match(
$admin_dir . ‘/plugin/{PluginCode}/config’,
‘Plugin\{PluginCode}\Controller\ConfigController::index’
)->bind(‘plugin_{PluginCode}_config’);
}

※実際のコードでは{PluginCode}はプラグインに含めるconfig.ymlのcodeに置換してください。

上記のコードを記述したプラグインをインストールして、
有効化すると、設定列に設定リンクが表示されます。
(例:img360Viewerプラグインの場合)
プラグイン設定

で、設定リンクのリンク先は必ず{管理画面のルートURL}/plugin/{PluginCode}/configと決まっているようです。
その為、上記コードで
{管理画面のルートURL}/plugin/{PluginCode}/config
にアクセスした時には、
/app/Plugin/{PluginCode}/Controller/ConfigController::index
を処理しなさいというルーティングを設定した事になります。

この状態では、設定リンクは表示されますが、
リンク遷移後はページがありませんのエラーが表示されます。
追加したルーティングに合わせて、ConfigControllerをプラグイン内に追加して、
indexメソッドを実装してください。

/src/Eccube/Controller/Admin以下の****Controller.phpを参考にコピーして利用すれば問題無いかと思います。
合わせて、設定画面のテンプレートファイルも必要になると思いますので、
プラグインにtwigファイルも含めるようにしてください。
(twigファイルも管理画面用のテンプレートファイルを流用できると思います。)

twigファイルの参照は、コントロールの処理の最後にこのようなソースを記述しています。

return $app->render(‘{PluginCode}/Resource/template/config.twig’, array(‘form’ => $form->createView()));

あとプラグインの設定値を保存しておく場所ですが、
EC-CUBE2系ではdtb_pluginテーブルに自由に使えるカラムが存在していて、
そこにデータを格納する事ができましたが、
EC-CUBE3系では、そのようなカラムは存在していないので、
自分でプラグイン用のテーブルを追加して、格納させる必要があります。
テーブルの追加等は、プラグインにMigrationやEntity等を追加する必要があります。
(テーブルを追加する手順は、EC-CUBE3プラグイン仕様書を確認ください。)

それでは、プラグイン設定画面へのリンクの追加方法は以上となります。