LoginSignup
7
3

More than 1 year has passed since last update.

【Laravel】Class (...) not foundの対処

Posted at

image.png

結論

自分で作成したモデルのnamespace宣言が誤っていた。

php artisan make:modelコマンドでモデルを作成した場合は自動的に名前空間が登録されるようですが、
コマンドを使用せず自分でモデルを追加した場合、別途登録してあげる必要があるようです。

発生したコード

// App\Models\PasswordResetsという名前空間をインポートしているのに
use App\Models\PasswordResets;

class ResetPasswordController extends Controller
{
...
    public function showResetForm(Request $request, $token = null)
    {
        // PasswordResetsが見つからずにエラー発生
        $record = PasswordResets::where('email', $request->email)->first(); 

解消

1. namespaceの宣言を確認

PasswordResetクラスのほうを見てみるとnamespaceの宣言が誤っていました。ので修正。

<?php

// 自分でModelsフォルダを作成してそこに格納しているので、namespace App\Models;と記述する必要がある...当たり前
namespace App;

use Illuminate\Database\Eloquent\Model;

class PasswordResets extends Model
{
...

2. composer dump-autoloadの実行

コマンドの実行によって独自に実装した名前空間も拾って、設定ファイルに保存してくれます。

> composer dump-autoload

3. 名前空間に追加されたことを確認

laravel/vendor/composer/autoload.classmap.phpに名前空間が追加されていればOKです。

<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
'App\\Models\\PasswordReset' => $baseDir . '/app/Models/PasswordReset.php',
7
3
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
7
3