2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-03

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

はじめに

現在「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が出てもどこを確認したら良いかが分かるようになりました。また、名前空間を書き込む際も自信を持って記述することもできるようになりました。

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

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

2
2
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
2
2