CakePHP3 で Component と Helper の連携

過去にやったやつの CakePHP3 版です。

s4-ba.hatenablog.jp

同じように Paginator のような Component と Helper を自作します。 CakePHP2 のときと比べてシンプルでわかりやすくなってると思います。

Component が呼ばれたら Helper も自動で呼ぶ

CakePHP2 のときと大きく変わることはないです。 initialize() に記述します。

<?php
class SampleComponent extends Component {
  public function initialize(array $config)
  {
    // Controller を取得
    $controller = $this->_registry->getController();
    // SampleHelper の追加
    $controller->helpers += ['Sample'];
  }
}

Helper で Component の設定を使えるようにする

CakePHP3 では配列の操作時にデフォルト値をマージしておくことを推奨しているので、これに則ります。

配列を操作する際、 empty チェックを使うよりも、デフォルト値をマージする方が良いです。 デフォルト値をマージすることによって、必要なキーが定義されることを保証できます。

コーディング規約#empty()/isset() の使用に注意

Helper の追加と同様に、initialize() に記述します。

<?php
class SampleComponent extends Component {
  // 設定のデフォルト
  protected $defaultSettings = [
    'property' => true,
  ];
  // 設定
  protected $settings = [];
  
  public function initialize(array $config)
  {
    // Controller を取得
    $controller = $this->_registry->getController();
    // SampleHelper の追加
    $controller->helpers += ['Sample'];

    // デフォルト設定のマージ
    $this->settings = $controller->sampleSettings + $this->defaultSettings;

    // 設定を Helper で利用するために request に設定する
    $controller->setRequest($controller->request->withParam('SampleSetting', $this->settings));
  }
}

Helper では以下のように設定を取得します。

<?php
class SampleHelper extends Helper {
  // 設定
  protected $settings = [];
  
  public function initialize(array $config)
  {
    // Component で設定した設定情報を取得
    $this->settings = $this->request->getParam('SampleSetting');
  }
}