[EC-CUBE4] プラグイン有効化時の処理をPluginManager.phpのenable()関数に実装しよう。プラグイン設定情報を有効化時にINSERTしよう。


概要

EC-CUBE4のプラグインをインストールするとプラグインの設定情報を格納するためのテーブルplg_プラグイン名_configがデータベースに作成されます。

しかしながら、テーブルが作成されるだけであって、設定情報はプラグインの設定画面で設定情報を入力してあげないとINSERTされません。プラグインの設定情報を見て振る舞いを変えるようなプラグインの場合は初期情報が入っていないと困りますよね…。

プラグイン有効化したら設定情報をテーブルにINSERTするような処理を書いてあげましょう。


プラグイン有効化時の処理をPluginManager.phpenable()関数に実装しよう

EC-CUBE4のプラグインは、インストール時、有効化時、無効化時、削除時に行う操作を実装することができます。その実装はプラグインディレクトリ内のPluginManager.phpに実装していきます。


app/Plugin/TestTest/PluginManager.php

<?php

namespace Plugin\TestTest;

use Eccube\Plugin\AbstractPluginManager;
use Plugin\LimitedTimeProduct\Entity\Config;
use Symfony\Component\DependencyInjection\ContainerInterface;

class PluginManager extends AbstractPluginManager
{
/**
* プラグイン有効化時に走る
* @param array $meta
* @param ContainerInterface $container
*/

public function enable(array $meta, ContainerInterface $container){ }
}


プラグイン有効化時にはenable()関数が実行されますので、そちらに実装を加えていきます。

プラグイン生成時にConfigというEntityが作成されますので、そちらのEntityオブジェクトを生成して値を詰めて反映してあげればテーブルINSERTの処理ができます。以下のような感じです。


app/Plugin/TestTest/PluginManager.php

<?php

namespace Plugin\TestTest;

use Eccube\Plugin\AbstractPluginManager;
use Plugin\LimitedTimeProduct\Entity\Config;
use Symfony\Component\DependencyInjection\ContainerInterface;

class PluginManager extends AbstractPluginManager
{
/**
* プラグイン有効化時に走る
* @param array $meta
* @param ContainerInterface $container
*/

public function enable(array $meta, ContainerInterface $container)
{
$this->createConfig($container);
}

/**
* 設定情報を入れる
* @param ContainerInterface $container
*/

private function createConfig(ContainerInterface $container)
{
$em = $container->get('doctrine.orm.entity_manager');
$Config = $em->find(Config::class, 1);
if($Config) return; // すでにINSERTされてたら後続処理を行わない

$Config = new Config();
$Config->setName("情報を入れるよ");

$em->persist($Config);
$em->flush($Config);
}
}


これで、プラグインを有効化時に設定情報テーブルに1行設定情報をINSERTできます。すでにINSERTされている場合は余計に設定情報をINSERTしないように抜ける処理を入れておきましょう。

また、ConfigのEntityはidとnameしか持たないので、設定情報としてフラグを持たせたいとか他数値をもたせたいとかあれば、Entityとかに実装を加えてみてください。

以上です。