自作のクラスを`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で遊んだり、趣味で開発したり。