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のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。
-
-
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。
-
-
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。
-
-
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。
-
-
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4でテンプレートやレイアウトファイルをデフォルトから変更する場合は「render()」を使用するが、記述場所はできるだけコントローラー内の最後の方に書く方がいい。
-
-
CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ
CakePHP3でシステム開発をする際、途中でカラムを追加した場合に何を変更すればいいかを確認。カラムを追加する前後で Bakeした結果を比較し、変更になった点をリストアップした。
-
-
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。
-
-
CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。
-
-
CakePHP3でファイルのアップロード処理を自作・解説付き・その1
CakePHP3でファイルをアップロードする処理を、php.netにある「エラーを起こさない」と説明がある処理を参考に作成。サンプルソースとその解説付きで、コピペでも動くし、カスタマイズも簡単!
-
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。