エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説

      2024/06/21

CakePHP4 のコマンドプログラムからコンポーネントを読み込む

 
今回は「CakePHP4でコマンドプログラムを作成する」の全 4回のうちの 2回目で、「コマンドプログラムからコンポーネントを呼び出す方法」について解説します。
 

 
 

共通関数のコンポーネントについて

 
プログラムを作成する中で、他の「コントローラー(Controller)」でも使用する共通処理は、「コンポーネント(Component)」として別ファイルにまとめて管理をします。
(「モデル(Model)」の場合は「ビヘイビア(Behavior)」で、「ビュー(View)」の場合は「ヘルパー(Helper)」ですね。)
 
コマンドプログラムからは、「コントローラー(Controller)」用に作成されたものも含めて、「コンポーネント(Component)」の処理を呼び出して利用することができるようになっています。
 
 
今回の記事では、そのコンポーネントを呼び出して、コマンド内で利用する方法について解説します。
 
 

コマンドから共通関数のコンポーネントを読み込む処理

 
コンポーネントを読み込む処理を追記したコマンドプログラムが下記となります。
 

<?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()」に記述する方法をオススメしたいですね。
 
 

  public function initialize(): void
  {
    parent::initialize();

    // 各モデルの読み込み
    $this->Users        = TableRegistry::getTableLocator()->get('Users');

    // Commonコンポーネントの読み込み
    $this->Common   = new CommonComponent(new ComponentRegistry());
  }

 
 

コンポーネントを作成

 
コンポーネントは下記コマンドでコンポーネントのテンプレートファイルを生成することができます。
 

$ cake bake component Common

 
 
これに対して、先のコマンドから利用する「getSample()」関数を追記すると下記のようになります。
 

<?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の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。

CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説

CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。

CakePHP3のcontroller内でテンプレート、レイアウトを変更する際の指定方法

CakePHP3でテンプレートファイルやレイアウトファイルをデフォルトのものから別のものに変更したい場合の指定方法を解説。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3で値を入力直後にバリデーションする方法解説

CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。

CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説

WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。

CakePHP3のバージョンを指定してインストールする詳細な手順を解説
CakePHP3、CakePHP4、CakePHP5のバージョンを指定してインストールする詳細な手順を解説

CakePHP3のバージョンを指定してインストールする方法を詳細解説。CakePHP3のインストールはComposerを使うため設定もほぼ自動で完了。データベースの接続情報を記載すればアプリ開発のベースが整う。