Laravelでモデルがnot foundするときの解決方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
Laravel では度々、モデルが not found することがあります。
エラーでいうところ
Symfony\Component\Debug\Exception\FatalThrowableErrorClass 'App\Http\Controllers\Post' not found
Symfony\Component\Debug\Exception\FatalThrowableErrorClass 'App\Post' not found
こんな感じのエラーです。
これは伝統芸能みたいなもので、全員が体感するエラーです。
これから紹介する解決方法を順番に検証してみてください。
なぜエラーが起こるのか?
①「このモデル(クラス)を使います」という宣言がない
② モデル(クラス)が読み込まれていない
③ そもそもファイルがない
ほぼほぼこの3つだと思います。
もちろんプログラミングでは例外も存在すると思いますが、現状この1〜3でほぼ全てなのではないでしょうか?
use App\Post を書く
これは ① の解決方法になります
コントローラーの上部でモデルを use してあげてください。
<?php
namespace App\Http\Controllers\Client;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//以下追記
use App\Post;
モデルがどこにあるのか、階層に気をつけて記述してください。
use App\Models\Post;
の可能性もあります。
use App\Post が間違っている
クラスの位置(ファイルの位置)が間違っていてもだめなので、正確な階層で記述する必要があります。
正しい階層で書かれているか確認してみてください。
クラスがキャッシュされていない
少し難しいですが、モデルやコントローラーなどのクラスは、場所がキャッシュされて呼び出されます。
「この場所に、こういう名前のクラスがある」
というのをキャッシュが情報として持っているということです。
そのキャッシュに情報がないときはこのエラーになります。
例えば、ファイルをコピーして手動で複製した時は、キャッシュがないのでエラーになります。
そのときは、
composer dump-autoload
というコマンドを打てば大抵キャッシュしてもらえます。
namespace が間違っている
ファイルをコピーした、移動した、自作したとき、保存されているディレクトリと namespace が間違っていることがあります。
namespace の確認をしましょう。
namespace App;
もし間違っていたら、namespace を編集して
composer dump-autoload
のコマンドを打ちましょう。コマンドを打つ理由としてはクラスがキャッシュされていないの項目のとおりです。
そもそもファイルがない可能性があります
意外とあるのがファイル自体がないというエラーです。
コマンド打ったときに実はエラーが出ていることがあって、それで生成などされていない可能性があります。
これらのエラーを起こさない最善策
オススメしたいのが、
ファイルは絶対にコマンドで生成する
ということです。
モデルの生成コマンドであれば、
php artisan make:model Models/Post
このコマンドでモデルが作成されます。
コマンドで生成すれば、ちゃんとファイルの情報がキャッシュされます ので、変な事故が減ります。
もし内容をコピーしたいのであれば、ファイル生成はコマンドで行って、中身をコピペしてあげると良いと思います。
まとめ
以上です。
このエラーは逆に見慣れるのでそのうち仲良くなれるエラーだと思います。
この記事で解決できたらぜひ Twitter などで共有お願いします。
感想・苦情は TwitterDM にご連絡ください。
それでは!
人気記事