- 更新日: 2016年2月17日
- PHP & CakePHP
CakePHP独自プラグインの自動読み込みには composer dumpautoload が必要
CakePHP3 で独自にプラグイン(plugins ディレクトリに置くライブラリ)を作成する機会があったのですけど、プラグインの autoload(自動読み込み)が効かなくて、しばらくの間はまってしまった。
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
結論を先に書きますと… 自動読み込みを有効にするために、
1 2 3 |
$ composer dumpautoload |
を実行して、Composer の自動読み込みキャッシュをリフレッシュさせる必要がありました。
CakePHP3 でプラグイン作成と autoload 設定
プラグイン作成については、公式ドキュメントが詳しい。
プラグイン – CakePHP Cookbook 3.x ドキュメント
bin/cake bake コマンドでプラグインを生成します。
1 2 3 |
$ bin/cake bake plugin MyPlugin |
あとは、プラグインを好きなように作成する。
続いて、作成したプラグインを読み込むために、config/bootstrap.php に load の追記をする。
config/bootstrap.php
1 |
Plugin::load('MyPlugin'); |
それから、自動読み込みを有効にするために、composer.json に autoload を追記します。
composer.json
1 2 3 4 5 6 7 8 9 10 11 12 13 |
"autoload": { "psr-4": { "App\\": "src", "MyPlugin\\": "./plugins/MyPlugin/src" } }, "autoload-dev": { "psr-4": { "App\\Test\\": "tests", "Cake\\Test\\": "./vendor/cakephp/cakephp/tests", "MyPlugin\\Test\\": "./plugins/MyPlugin/tests" } } |
以上で、ファイル側での autoload のための設定は終了です。
“composer dumpautoload” で Composer 自動読み込みキャッシュを初期化
しかしながら上記の設定だけですと、なぜか autoload が効かずエラーが発生し続けました。公式ドキュメントのプラグインのページを読み返したところ…
そして、 Composer の自動読み込みキャッシュを初期化する必要があります。$ php composer.phar dumpautoload
と書いてあるのに気付き、以下を実行。自分の環境では composer コマンドでエイリアスを作っているので、やってることは公式ドキュメントに書いてあるのと同じことです。
1 2 3 |
$ composer dumpautoload |
これで、ようやく独自に作成したプラグインの自動読み込みが有効になりました。解決したらなんてことはない原因だったのですけど、ちょっと時間がかかってしまった…。CakePHP でプラグインを作る際のちょっとした落とし穴かもしれない。
- – 参考リンク –
- cakephp3でControllerを別階層で管理したい時のTips | Webuilder240
- sizuhiko – Technote – Composerのautoloadを使いこなす
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!