Laravel packagesに配置したクラスがNot Foundになるときは

Laravel packagesに配置したクラスがNot Foundになるときは

Laravelのルートディレクトリにpackagesディレクトリを作って構成する場合、その中に置いたクラスファイルはそのままでは参照できません。

問題

以下の場所にあるSampleClass.phpのインスタンスを生成しようとすると、Not Foundとエラーが表示されます。

laravel-root
|
|- app
|- config
|- database
|- public
|- resources
|- routes
|- packages
|   |- SampleClass.php ← これ
|- storage
|- tests

ex. $sample = new Packages\SampleClass(); ← error!

解決方法

Laravelのオートローダーはapp, databaseのディレクトリが対象になっています。
packagesディレクトリを対象に追加して解決します。

composer.json

オートローダーの設定はcomposer.jsonで行います。
packagesディレクトリを追加します。

/composer.json

  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Database\\Factories\\": "database/factories/",
      "Database\\Seeders\\": "database/seeders/",
      "Packages\\": "packages/"
    }
  },

再定義

コマンドラインからオートローダー設定に基づいて対象ファイルを再定義するコマンドを実行します。

composer dump-autoload

プログラミングカテゴリの最新記事