CakePHP バッチ処理

バッチ処理の機能

CakePHP3の機能をフルに使える。
DBの取得、ログ出力、例外、固定値ファイル等

CakePHP4〜はシェルは非推奨。→コマンドへ

バッチ実装方法

<?php
※TestShell.php
namespace App\Shell;

use Cake\Console\Shell;
use Cake\Log\Log;
use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;
use App\Controller\Component\TESTComponent;

「Shell」を継承
class TESTShell extends Shell {

  public function initialize() {
    コンポーネントを参照(コンポーネントを利用する場合)
    $this->TEST = new TESTComponent(new ComponentRegistry());
  }

  シェルではmainメソッドが自動実行される
  public function main() {
    TESTComponent内のメソッドを実行
    $this->TEST->check();
  }
}

ファイル生成
cake bake command コマンド名
例 cake bake command TestCommand

TestCommand.php
class TestCommand extends Command
{
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
$parser = parent::buildOptionParser($parser);
return $parser;
}

public function execute(Arguments $args, ConsoleIo $io)
{
$io–>out(‘CakePHP4’);
}
}

ファイル構成


└cake.php
└logs
 └cli-debug.log
 └cli-error.log
  ↑画面ログとは別にシェルログが出力される
└src
 └Controller
  └Component
   └TESTComponent.php
└Shell
 └TestShell.php
  ↑末尾に「Shell」を付ける

└src
 └Controller
  └〜
 └Shell
  └〜
 └Command
  └〜TestCommand.php

バッチ実行方法

シェル実行
php cake.php TEST
↑TEST=TestShell.php
コマンド実行
cake コマンド名