概要
3.0.13以降からコンソールコマンドを拡張し、cronジョブやインポートなどのバッチジョブをプラグインで開発できます。
コンソールプラグインの実行方法
コンソールプラグインを開発することで、以下のように実行することができます。
php app/console [グループ名]:[アクション名] [パラメータ]
開発中は、display_errors
をオンにしておくとデバッグが行いやすいです。
php -d display_errors app/console [グループ名]:[アクション名] [パラメータ]
コンソールプラグインの実装方法
例として、引数として渡された商品IDから商品情報を出力するコマンドを作成します。
ファイルとフォルダはapp/Plugin以下に作成します
- ファイル・ディレクトリ構造
app/Plugin/
└── ProductDisplay
├── Display.php
├── ServiceProvider
│ └── ProductDisplayServiceProvider.php
└── config.yml
- Display.phpに、ロジックを実装します。
<?php
namespace Plugin\ProductDisplay;
use Knp\Command\Command;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
use Symfony\Component\Console\Helper\TableHelper;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Display extends Command
{
protected function configure()
{
// コマンド名やパラメータの設定を行います。
// 参考:http://docs.symfony.gr.jp/symfony2/cookbook/console.html
$this
->setName('product:display')
->setDescription('Display product info by product id')
->addArgument('id', InputArgument::REQUIRED, 'Product ID');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// Eccube\Application
$app = $this->getSilexApplication();
// 以下にロジックを実装していきます。
// サンプルとして、引数で指定したIDの商品情報を表示します。
$output->writeln('<info>Product Info.</info>');
dump($app["eccube.repository.product"]->find( $input->getArgument('id')));
}
}
- ProductDisplayServiceProvider.php では、コマンドをEC-CUBEに登録する処理を記述します。
<?php
namespace Plugin\ProductDisplay\ServiceProvider;
class ProductDisplayServiceProvider implements \Silex\ServiceProviderInterface
{
public function register(\Silex\Application $app)
{
// コマンドライン以外ではコマンドの登録はスキップする
if (!isset($app['console'])) {
return;
}
$app['console']->add(new \Plugin\ProductDisplay\Display());
}
public function boot(\Silex\Application $app)
{
;
}
}
- config.ymlにプラグイン情報を記述します。
name: 商品情報表示コマンド
code: ProductDisplay
version: 0.0.1
service:
- ProductDisplayServiceProvider
コンソールプラグインの確認
プラグインが無効状態の場合は有効化してください。
以下で、コマンドの一覧を確認します。
php app/console
結果の中に、追加したプラグインのコマンドが表示されることを確認します(Available commands:以下)
$ php app/console
EC-CUBE version 3.0.13
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
help Displays help for a command
list Lists commands
cache
cache:clear Clear the cache of Application.
debug
debug:config Shows a list of config file
migrations
migrations:diff Generate a migration by comparing your current database to your mapping information.
migrations:execute Execute a single migration version up or down manually.
migrations:generate Generate a blank migration class.
migrations:migrate Execute a migration to a specified version or the latest available version.
migrations:status View the status of a set of migrations.
migrations:version Manually add and delete migration versions from the version table.
plugin
plugin:develop plugin commandline installer.
product
product:display Display product info by product id.
router
router:debug Displays current routes for an application
コマンドを実行します。
php app/console product:display 1
指定した商品のdump結果が表示されたら成功です。