yak shaving life

遠回りこそが最短の道

CakePHPでComponentディレクトリ直下以外に置いたComponentを読み込む方法

タイトルの通り、src/Controller/Component/ 直下以外の場所にComponentを置いてControllerからloadしたい場合。なぜか公式にやり方が書いていなかったのでメモ。

バージョン

CakePHP 3.x

書き方

例えばsrc/Controller/Component/SubDir/AbcdComponentをloadしたい場合は以下のように書けば良い

// In Your Controller
$this->loadComponent('Abcd', [
    'className'=> '\App\Controller\Component\SubDir/AbcdComponent'
]);

備考

上記でちゃんと動きますが表記が冗長な感じですし、公式に載っていないということはおそらく推奨されていないということなので、大人しくComponent/直下に置きましょう。Componentの数が増えたりNamespaceを切りたいということであればPluginにしてしまうのが良さそうです。