自作のクラスを`composer`の`autoload`で自動読み込みする

Slimの練習の途中でやってみました。 composerrequireしたライブラリはvendorに入り、vendor/autoload.phpを読み込むことでそれらを一気に使えるのは分かっていましたが、自作のコンポーネントに関してもautoloadできると今更知ったのでメモ。 例えば、src/ControllerディレクトリにgetData.phpを作成し、以下のように記述します。
<?php
namespace Slim\App\Controller;

class getData
{
    //以下プロパティやメソッド
}
他にもsrc/Modelsrc/Helperディレクトリに適宜名前空間を付けてクラスのPHPファイルを作成しておきます。 この状態でcomposer.jsonに以下のように記述します。
    "autoload": {
        "psr-4": {
            "Slim\\App\\Controller\\": "src/Controller",
            "Slim\\App\\Model\\": "src/Model",
            "Slim\\App\\Helper\\": "src/Helper"
        }
    },
psr-4autoloadの仕様ですね。これに則って、名前空間をディレクトリを記述すれば良い、と。パスの基準はcomposer.jsonのあるディレクトリ。
> composer dump-autoload
上述のコマンドを実行することで、対応付けのためのクラスマップが生成されます。 増減がある度に実行するのが面倒……というのは、検索してみるとやはりそういう声はあるようですね。 Roboを使って自動化とか……Composer Tasks – Roboを見るとありそうですね。 これでできるのでしょうか……(未検証)。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。