3
0

【Laravel】useした時に`Class not found`とでて困った話

Last updated at Posted at 2024-03-10

はじめに

こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。

今回は、Class "Lib\UsePost" not foundというエラーがでてしまって困った話をします。

困ったこと

Laravelプロジェクト直下にLibというディレクトリを作成し、'UsePost.php'というファイルを作成したのですが、

これをコントローラから読み込もうとしたときにClass "Lib\UsePost" not foundとなってしまい読み込むことができなくて困ってしまいました。

最初に実装した内容

最初に実装した内容としては、PostControllerUsePostを以下のように実装しました。

PostController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Lib;

class PostController extends Controller
{
    public function count():int
    {
        $usePost = new Lib\UsePost;
        $count = $usePost;
        return $count";
    }
}
UsePost.php
<?php
namespace Lib;

class UsePost
{
    function count():int
    {
        return 1;
    }
}

ファイルの構成としては以下のような感じで作成しました。

src/
 ├── app/Http/Controllers/PostController.php
 ├── lib/UsePost.php

解決策

この記事に書いてありました。

composer.jsonautoloadに今回作成したlibディレクトリを追加し、composerを読み込みなおします。

具体的には、composer.jsonを以下のように修正しました。

composer.json
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Lib\\": "lib/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },

変更したら以下のコマンドでcomposerの再読み込みを行いました。

composer dump-autoload

これで冒頭に困っていたClass "Lib\UsePost" not foundは消えて動くようになりました。

なぜエラーがでていたのか

今回作成したファイルがLaravelのオートロード機能で読み込まれていなかったことが原因でした。

オートロード機能とは、ファイルを自動で読み込んでくれることによってrequireをいちいちファイルの冒頭に書かなくてもよくなるというものです。

以下のサイトで詳しく紹介されていましたので、ここを読んでみるとわかりやすかったです。

Laravelだとcomposer.jsonに書かれているファイルを読み込むという仕様でしたので、今回は新しく自分でフォルダを作成したために、オートロード機能で読み込まれずにClass "Lib\UsePost" not foundが出てしまっていました。

また、PHPのオートローダ機能については以下の公式サイトを読みました。

おわりに

私自身、Laravelはオートローダ機能をあまり理解していないて今まで使用してしまっていたので、今回はいい機会になったかなと思います。

Laravelの機能について知らないことがまだまだたくさんあるので、これからはどのようにその機能が実装されていて、それによってどのようなメリットを得られているかなど、深く考えていこうと思いました。

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました!

参考文献

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0