Laravel

【Laravel/Clean Architecture】Target class [example Packages Class] does not exist. の対処法

開発環境

  • Laravel9

概要

Laravelでクリーンアーキテクチャ実装していた際、

DomainやUseCaseを入れるためにPackagesという新しいディレクトリを作成しました。

しかし、新しく作成したディレクトリにクラスを作成しても、このままでは使うことができません。

毎回プロジェクトの最初だけ行って忘れてしまうため、備忘録として残します。

結論

composer.jsonのautoload(psr-4)に追記する

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

※autoload-devにもpsr-4がありますが、autoloadへの追記でエラーは解消されます

utoloadオートロード)とは namespaceを指定するだけで、

require_once などを使わずに自動的にファイルやクラスを解決してくれる

composerの便利な仕組みです。

プロジェクト直下に新しいディレクトリを作成するときは、

composer.jsonのautoload(psr-4)に追記するようにしましょう

プロジェクト直下のapp 内にディレクトリやクラスを作成する場合は、

デフォルトで記載があるため、追記の必要はありません。

          "App\\": "app/",

注意

namespaceやuseに記述する際はappと同じように大文字で記述します

namespace Packages\UseCase\***; ←ディレクトリ名はpackagesだが、Packagesと書く
use App\Http\Controllers\***; ←ディレクトリ名はappだが、Appと書く

-Laravel