CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
2024/06/21
CakePHP4 のコマンドプログラムからコンポーネントを読み込む
今回は「CakePHP4でコマンドプログラムを作成する」の全 4回のうちの 2回目で、「コマンドプログラムからコンポーネントを呼び出す方法」について解説します。
- CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
- CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
- CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
- Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
共通関数のコンポーネントについて
プログラムを作成する中で、他の「コントローラー(Controller)」でも使用する共通処理は、「コンポーネント(Component)」として別ファイルにまとめて管理をします。
(「モデル(Model)」の場合は「ビヘイビア(Behavior)」で、「ビュー(View)」の場合は「ヘルパー(Helper)」ですね。)
コマンドプログラムからは、「コントローラー(Controller)」用に作成されたものも含めて、「コンポーネント(Component)」の処理を呼び出して利用することができるようになっています。
今回の記事では、そのコンポーネントを呼び出して、コマンド内で利用する方法について解説します。
コマンドから共通関数のコンポーネントを読み込む処理
コンポーネントを読み込む処理を追記したコマンドプログラムが下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<?php declare(strict_types=1); namespace App\Command; use Cake\Command\Command; use Cake\Console\Arguments; use Cake\Console\ConsoleIo; use Cake\Console\ConsoleOptionParser; use Cake\Controller\ComponentRegistry; // コンポーネントの使用を可能にする use App\Controller\Component\CommonComponent; // 使用するコンポーネントを指定 /** * Hello command. */ class HelloCommand extends Command { /** * Hook method for defining this command's option parser. * * @see https://book.cakephp.org/4/en/console-commands/commands.html#defining-arguments-and-options * @param \Cake\Console\ConsoleOptionParser $parser The parser to be defined * @return \Cake\Console\ConsoleOptionParser The built parser. */ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser { $parser = parent::buildOptionParser($parser); return $parser; } public function initialize(): void { parent::initialize(); // Commonコンポーネントの読み込み $this->Common = new CommonComponent(new ComponentRegistry()); } /** * Implement this method with your command's logic. * * @param \Cake\Console\Arguments $args The command arguments. * @param \Cake\Console\ConsoleIo $io The console io * @return null|void|int The exit code or null for success */ public function execute(Arguments $args, ConsoleIo $io) { $io->out('Hello world.'); print_r("Hello world. \n"); echo "Hello world. \n"; // // Commonコンポーネントの読み込み // $this->Common = new CommonComponent(new ComponentRegistry()); $getSample = $this->Common->getSample(); print_r($getSample); } } |
利用するコンポーネントを use句で指定
まず初めに、「use句」を記述する箇所に 11~12行目の 2行を追記します。
11行目は固定の文字列ですが、12行目は使用するコンポーネントの名称に書き換えてください。
上記では「CommonComponent.php」と言うコンポーネントを呼び出す想定の記述になっています。
コンポーネントをオブジェクトとして取得
続けて、コンポーネントをオブジェクトとして取得する「39行目」か「57行目」のいずれかを記述します。
コンポーネントだけを呼び出すのであれば 57行目の記述方法の方が簡単かと思います。
ただ、個人的には「initialize()」に、そのコマンド(コントローラー)内で使用するコンポーネントだけではなく、モデルの読み込みもまとめて記述する方法が好きですので、34~40行目の「initialize()」に記述する方法をオススメしたいですね。
1 2 3 4 5 6 7 8 9 10 |
public function initialize(): void { parent::initialize(); // 各モデルの読み込み $this->Users = TableRegistry::getTableLocator()->get('Users'); // Commonコンポーネントの読み込み $this->Common = new CommonComponent(new ComponentRegistry()); } |
コンポーネントを作成
コンポーネントは下記コマンドでコンポーネントのテンプレートファイルを生成することができます。
1 |
$ cake bake component Common |
これに対して、先のコマンドから利用する「getSample()」関数を追記すると下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php declare(strict_types=1); namespace App\Controller\Component; use Cake\Controller\Component; use Cake\Controller\ComponentRegistry; /** * Common component */ class CommonComponent extends Component { /** * Default configuration. * * @var array<string, mixed> */ protected $_defaultConfig = []; public function getSample() { return "Sample"; } } |
コマンドプログラムからコンポーネントを読み込む方法のまとめ
基本的に、コントローラーからとコマンドからと、コンポーネントを読み込む方法はあまり違いはありません。
ただ、少し記述の仕方が違うことと、use句で使用するコンポーネントを指定する点が違うなどしていますので、少し確認が必要かと思います。
CakePHP4の関連記事
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3の開発で発生する「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」のエラーには特有の原因もあるため、その説明と対処方法の解説。
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。
-
-
CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
CakePHP4でデフォルトのレイアウトファイル「default.php」は管理側に使用し、これとは別のデザインを公開側のページに設定したい、を実装する方法を解説。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。
-
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。
-
-
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。