0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OctoberCMSプラグイン作成:コマンド作成

Posted at

OctoberCMSはLaravelやSynfonyがベースなので、それらのフレームワーク同様にコマンドラインから実行できるコマンドを簡単に作成することができます。
これは、定期的に実行したいバッチ処理や簡単な開発ツールを作ったりするのに便利です。

基本的に公式ドキュメント:Console Developmentでよく解説されてますが、簡単に

基本

基本は下記の2ステップだけです。

  1. スキャフォールディングで雛形作成して、やりたいことを記述。
  2. Plugin.php に登録。

スキャフォールディングで簡単に雛形が作成できます。
プロジェクトのルードディレクトリで下記を実行します。

php artisan create:command <author>.<plugin名> <コマンドクラス名>

php artisan create:command Pikanji.Utility MyCommand

この例で作成されるのは、plugin/pikanji/utility/console ディレクトリにMyCommandクラスだけです。間違ったら、削除してやり直すだけです。
この作成されたクラスでは utility:mycommand という既に実行可能なコマンドが実装されています。1クラスで1コマンドの実装になります。

次に、作成したコマンドをプラグインに登録します。

対象のプラグインのPlugin.phpの register メソッドをオーバーライドしてコマンドを登録します。ベースクラス \System\Classes\PluginBaseregister メソッドは空なのでメソッドを実装するだけでOKです。
登録は下記のようになります。

$this->registerConsoleCommand('<plugin名>.<command>', '<コマンドクラス(ネームスペース込み)>');

public function register()
{
    $this->registerConsoleCommand('utility.mycommand', 'Pikanji\Utility\Console\MyCommand');
}

これで、プロジェクトのルードディレクトリで下記を実行すると"Hello world!"と表示されます。

php artisan utility:mycommand

実行したい内容は handle メソッド(OctoberCMSビルド419以前ではfireメソッド)に記述していきます。

コンソール出力する

出力された雛形にすでに記述されていますが、コンソール出力は下記のようにできます。

$this->output->writeln('Hello world!');

コンソール出力の色を変える

ここらへんもOctoberCMSと言うよりLaravelの機能ですが、info, comment, errorなどといったメソッドでコンソール上での色を変えて出力することもできます。

$this->info('Display this on the screen');
$this->error('Something went wrong!');

また、入力を促したり、ユーザに確認を求めたりも簡単にできます。
こちらも公式ドキュメントにさらっと説明されています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?