Help us understand the problem. What is going on with this article?

【初心者向け】LaravelでClass not foundが出た際の名前空間の確認方法

名前空間の記述ミスの探し方を書いた記事です。

はじめに

現在「PHPフレームワークLaravel入門 第2版」でLaravelを学んでいます。

Eloquentのモデルのスコープクラスを作成・使用の際に発生したClass not foundエラーの解決で得られたものを自身の振り返りも兼ねて記事にしてみました。

コードの中でClass名を書くと、Laravelはどのようにuseやnamespace部分(名前空間)を見に行くのか、その繋がりを図を用いて紹介したいと思います。

書いたコードの繋がりが分かれば理解しやすい!

タイプミスや名前の指定ミスを調べる際の確認箇所としてお役立ていただけたら幸いです。

おかしなところがありましたらご指摘ください。

Class not foundが出たコード

App\Person.php
<?php
namespace laravelapp;
use laravelapp\app\Scopes\ScopePerson;

    protected static function boot()
    {
       parent::boot();
       static::addGlobalScope(new ScopePerson);
    }

エラーメッセージ

Error
Class 'laravelapp\app\Scopes\ScopePerson' not found
laravelapp\Person::boot
C:\Users\user\laravelapp\app\Person.php:34

34行目:static::addGlobalScope(new ScopePerson);

出ているエラーは「 ScopePersonクラスが見つからないよ! 」というもの。

エラーが出た時の頭の中は、use laravelapp\app\Scopes\ScopePerson;で場所はしているし、たしかにその位置に ScopePerson.php が存在しているし、ファイル名をコピペしているからタイプミスは考えにくい。「 どうして??? 」な状態。

とはいえ、Laravelさんが「 見つからない 」というのだから、ちゃんとScopePersonクラスまでご案内するのが私の役目。

そこで ScopePersonクラス に絡むところをいろいろ触ってどういう風にLaravelが呼び出されたクラスを見に行っているのか確認して得られたのが以下の流れです。
スクリーンショット 2020-10-03 131318.jpg
各文法の中で"クラス名"を入れるところに、文字列が入力されればそれをクラス名として認識し、Laravelは入力したクラスのファイルを探しに行きます。
スクリーンショット 2020-10-03 152219.jpg

しかし、

まだこれで呼び出し・読み込み完了ではありません。
ScopePersonのファイルが発見されて開かれるところまできたので、
これで呼び出し・読み込み完了かと思いきや、まだチェックされます。

チェックされるのは開いたScopePerson.phpの冒頭のnamespaceです。

ここでnamespaceの役割についての解説を挟みます。

namespace自身の所属(存在位置)の表明です。

これは、ScopePersonクラスを使用するためだけのチェックではなく、クラスやコントローラーを呼び出すという動きをLaravelにさせたときに呼び出された側が表明しているnamespaceを確認することで、間違ったクラスやコントローラーを呼び出しだしていないか確認するという全体に共通する仕組みです。

私はここの誤りでClass not foundとなっていました。
image.png

ここの流れが分かるようになることで、コードを書くときに適切な名前空間を指定することができるようになり、Class not foundが出てもどこを確認したら良いかが分かるようになりました。また、名前空間を書き込む際も自信を持って記述することもできるようになりました。

参考にしていただける方がいらっしゃいましたらと思い作成した記事でした。そして初投稿です。(^^)

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

TakaTomo_mc52
現在サーバーサイドエンジニアへの転職を目指して PHP,Laravel,HTML,CSSを学習しているプログラミング初心者です。 学んだことのアウトプットを行っていきます。どうぞよろしくお願いいたします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away