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
- CHIRIMENおさわり&もくもく会 〜Raspberry Pi 4 & Jetson対応記念〜に参加しました 2019/11/17
- CakeFest 2019 Tokyoに参加しました 2019/11/17
- Polymer.co-edo #27 2019/10/13
- PHPカンファレンス沖縄2019で、 標準インターフェースを使ったアプリケーション開発について発表してきました 2019/10/13
- PHPカンファレンス北海道 2019で「PHPを学ぶということ」について発表してきました 2019/09/22
- Maker Faire Tokyo 2019にCHIRIMENコミュニティで参加しました 2019/08/12
- Google Cloud Next Tokyo'19 に出展しました 2019/08/12
- Chrome Tech Talk Night 2019/07/28
- PHPカンファレンス福岡2019で、 標準インターフェースを使ったアプリケーション開発について発表してきました 2019/06/30
- Polymer.co-edo meetup #26を開催しました 2019/06/30