関数をCommandで実行する【CakePHP4】

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環境でのコマンド実行は簡単に実装できます。

メール日時指定での自動配信や、ユーザ状況の定期チェック等、実装できるサービスの幅が広がりますのでぜひ活用してみてください。

コメント

タイトルとURLをコピーしました