Laravel4のオートロード
タグ: Laravel4
この記事は、適宜更新します。
1.PSR-0規約を使用する
PSR-0規約を使用し、自分のクラスを管理する場合は、Composerのオートロードを使用します。
ルートディレクトリーに存在するcomposer.jsonに使用するディレクトリーを追加します。
"autoload": { "psr-0": { "Apple\\Repositories\\": "app/repositories/", "Apple\\Services\\": "app/services/" } }
その後、composer dump-autoload
を実行し、Composerに登録します。これにより、vendor/composer/autoload_namespaces.phpに名前空間とディレクトリーの関係が保存され、composerによるローディングが行われるようになります。
2.PSR-0以外を使用する
PSR-0以外を使用する場合、つまり他の規則や全く規則を使用しない場合(ダブリに気をつけて!)、オートロードの対象とするディレクトリーをクラスマップとして指定します。
"autoload": { "classmap": [ "app/repositories", "app/services" ]
その後、composer dump-autoload
を実行し、Composerに登録します。
これにより完全修飾クラス名(トップレベルからの名前空間にクラス名をつけたもの)と、それが記述されているPHPファイルとの対応マップがvendor/composer/autoload_classmap.phpに生成されます。クラスを指定された場合、完全修飾名に変換して、このファイルの内容に一致するファイルをロードする仕組みになっています。
これは「オート」ロードでありませんね。予め生成した対応表による、ローディングです。
そのため、PHPファイルを移動したり、名前空間を書き換えたり、クラス名、ファイル名を変更したり、新しく追加したりする場合、必ず再生成を行う必要があります。
その代わり、名前空間、ディレクトリー構造、ファイル名を縛る規則は無いため、自分の好みに合わせて使用できるわけです。(ですから、バッティングしないように気をつけましょう!)
3.Laravelの命名規則を使用する
Laravel独自の規則に従うことで、いちいちComposerのアップデートを行わなくても、オートロードしてくれる仕組みも用意されています。
app/start/global.php中で、ClassLoader::register()を使用し、モデルとコントローラーのディレクトリーが登録されています。コメントには、「Composerのアップデートしなくても…」と書かれています。