Composerのautoloadを使いこなす
Sunday, March 30, 2014 06:22:00 PM
Composerにはautoloadを自動生成する機能があり、これを利用するとrequire_onceなどを使わなくとも自動的にソースコードがロードされます。言葉のとおりautoloadですね。
例えばCakePHPではApp::uses()
という記述で利用するクラスがどこにあるのか識別して、クラスをロードできるようにするのですが、これを使わなくても Composer のautoload機能を使うとクラスが利用可能になります。
app/composer.json に以下のような定義を記述してみましょう。
{
"autoload": {
"classmap": ["Model", "Controller"]
},
}
ここで autoloadだけ
を更新するコマンドを実行します。
composer dumpautoload
コマンド名からはちょっと想像がつきにくいのですが、これを実行すると Generating autoload files
という結果が表示されてautoload定義が更新されます。
// app/Vendor/composer/autoload_classmap.php
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'AppController' => $baseDir . '/Controller/AppController.php',
'AppModel' => $baseDir . '/Model/AppModel.php',
'PagesController' => $baseDir . '/Controller/PagesController.php',
'Post' => $baseDir . '/Model/Post.php',
'PostsController' => $baseDir . '/Controller/PostsController.php',
);
今回は予めpostsテーブルからbakeしてPostモデルとPostsコントローラを生成しておきました。 こうすると、App::uses()を記述しなくても、composerのautoloadがクラス名からPHPファイルを自動解決してくれます。App::uses()の記述が多過ぎてコードの見通しが悪い場合などに利用を検討されてはいかがでしょうか?
この他にもComposerのautoload機能は
- PSR-4
- PSR-0
- Files(ファイルを直接指定できる)
- include-path(どうしてもphp.ini的なincludeパスで解決しなくてはならない時のためにある)
といったパス解決方法を用意していますので、namespaceが入ったものなどのサポートも万全です。
詳しくは Composerの公式ドキュメントのautoloadを参照ください。
Recent Articles
- GAE gen1 で動いている PHP5.5 で作った個人開発サービスを gen2 PHP8.2 へ移行した1年記 〜 その 2 2024/03/20
- GAE gen1 で動いている PHP5.5 で作った個人開発サービスを gen2 PHP8.2 へ移行した1年記 〜 その 1 2024/03/20
- マルチプルレポをモノレポへコミットログを残しながら移行する 2023/09/27
- tsyringe を TypeScript 5 で使う方法 2023/05/02
- LocalStack を使って aws-sdk の Integration Test を実行する 2023/04/19
- AWS SDK v3 のモジュールと利用方法 2023/04/18
- ts-jest が esbuild/swc をトランスフォーマーに使って高速化していた 2023/04/13
- aws-sdk v3 を使うライブラリを作ったときは、なるべく peerDependencies に設定しよう 2023/04/11
- aws-sdk v2 が 2023 年中にメンテナンスモードになる 2023/04/06
- Node.js v18 / aws-sdk v3 の Lambda アプリが突然動かなくなる 2023/04/05