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のアップデートしなくても…」と書かれています。