CakePHPで構築したサービス内で作成した関数を、コマンドで実行したいケースがあります。
例えば、一定時間おきにCron実行する際などです。
今回はそのような場合に利用するコードを紹介します。
基本のコード
●コマンド
//src/Command/HogeCommand.php
use Cake\Console\Arguments;
use Cake\Console\Command;
use Cake\Console\ConsoleIo;
class HogeCommand extends Command
{
public function execute(Arguments $args, ConsoleIo $io)
{
echo("ほげほげ");
}
}
●ターミナルでコマンド実行
/path/to/bin/cake hoge
//↑実行すると"ほげほげ"が表示されます
Controller内の関数利用
Controllerで設定した関数を利用することも可能です。
●コマンド
//src/Command/PiyoCommand.php
use Cake\Console\Arguments;
use Cake\Console\Command;
use Cake\Console\ConsoleIo;
//以下を追記
use App\Controller\SamplesController;
class PiyoCommand extends Command {
public function execute(Arguments $args, ConsoleIo $io) {
$this->SamplesController = new SamplesController();
$this->SamplesController->piyo();
}
}
●コントローラ
//src/Controller/SamplesController.php
class SamplesController extends AppController
{
public function piyo(){
echo("ぴよぴよ");
}
}
●ターミナルでコマンド実行
/path/to/bin/cake piyo
//↑実行すると"ぴよぴよ"が表示されます
Component内の関数利用
Component内の関数利用も簡単です。
※componentについての解説は下記
●コマンド
//src/Command/FugaCommand.php
use Cake\Console\Arguments;
use Cake\Console\Command;
use Cake\Console\ConsoleIo;
//以下を追記
use Cake\Controller\ComponentRegistry;
use App\Controller\Component\SampleComponent;
class FugaCommand extends Command
{
public function execute(Arguments $args, ConsoleIo $io)
{
$this->Sample = new SampleComponent(new ComponentRegistry());
$this->Sample->fuga();
}
}
●コンポーネント
class SampleComponent extends Component
{
public function fuga(){
echo("ふがふが");
}
}
●ターミナルでコマンド実行
/path/to/bin/cake fuga
//↑実行すると"ふがふが"が表示されます
Cron実行
Xserverでのコマンドは下記。
/usr/bin/php7.4 /path/to/bin/cake.php piyo
※phpバージョン・/path/to/は環境によって書き換えのこと。
まとめ
Cake環境でのコマンド実行は簡単に実装できます。
メール日時指定での自動配信や、ユーザ状況の定期チェック等、実装できるサービスの幅が広がりますのでぜひ活用してみてください。
コメント