CakePHPで構築したサービス内で作成した関数を、コマンドで実行したいケースがあります。
例えば、一定時間おきにCron実行する際などです。
今回はそのような場合に利用するコードを紹介します。
基本のコード
●コマンド
1 2 3 4 5 6 7 8 9 10 11 12 13 | //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("ほげほげ"); } } |
●ターミナルでコマンド実行
1 2 | /path/to/bin/cake hoge //↑実行すると"ほげほげ"が表示されます |
Controller内の関数利用
Controllerで設定した関数を利用することも可能です。
●コマンド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //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(); } } |
●コントローラ
1 2 3 4 5 6 7 | //src/Controller/SamplesController.php class SamplesController extends AppController { public function piyo(){ echo("ぴよぴよ"); } } |
●ターミナルでコマンド実行
1 2 | /path/to/bin/cake piyo //↑実行すると"ぴよぴよ"が表示されます |
Component内の関数利用
Component内の関数利用も簡単です。
※componentについての解説は下記
●コマンド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //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(); } } |
●コンポーネント
1 2 3 4 5 6 | class SampleComponent extends Component { public function fuga(){ echo("ふがふが"); } } |
●ターミナルでコマンド実行
1 2 | /path/to/bin/cake fuga //↑実行すると"ふがふが"が表示されます |
Cron実行
Xserverでのコマンドは下記。
1 | /usr/bin/php7.4 /path/to/bin/cake.php piyo |
※phpバージョン・/path/to/は環境によって書き換えのこと。
まとめ
Cake環境でのコマンド実行は簡単に実装できます。
メール日時指定での自動配信や、ユーザ状況の定期チェック等、実装できるサービスの幅が広がりますのでぜひ活用してみてください。
コメント