Laravelのエラー対処法

スポンサーリンク

はじめに

Laravelで開発をしていて、以下のようなエラーが出たので、解決するまでにしたことを残します。

  • ~ is not instatiable
  • ~ is not found
  • Action [ ] not defined
  • ~ does not exist

is not instantiable

App\Providers\AppServiceProvider.phpファイルで依存性の注入部分を「use」を使って書くようにしました。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use {IUserRepositoryのnamespace}\IUserRepository;
use {UserRepositoryのnamespace}\UserRepository;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(
            IUserRepository::class,
            UserRepository::class
        );
    }
}

is not found, does not exist

.phpの付け忘れ

vs codeで開発をしていて起こったのですが、「新しいファイルの追加」→「ファイル名入力」の手順で新規ファイルを追加した際、ファイル名の最後に「.php」を付け忘れていました。

vs codeだと「.php」を付けなくてもPHPのアイコンが表示されるので気付きにくいです。

composer dump-autoload

ターミナルでcomposer dump-autoloadを実行してみる。

新しいフォルダを追加した場合は、ターミナルでcomposer dump-autoloadを実行してみると良いそうです。

compose.jsonファイルにメンテ

新しいフォルダを追加した場合は、compose.jsonファイルにメンテをしましょう。

例えば「packages」フォルダを追加し、以下のような構造になっている場合

 SAMPLE-PROJECT
 > app
 > bootstrap
 > config
 …
 > packages
 …
 {} composer.json
 …

「composer.json」ファイルに以下のように追記します。

{
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "packages\\": "packages/"
        }
    },
}

Action [ ] not defined

おそらくControllerが定義されていないというエラーの場合表示されるかと思います。

web.phpファイルの修正

routes\web.phpファイルを見直してみましょう。Controllerを名前空間も含めたフルパスで認識されるように「use」を追記しました。

修正前

<?php


use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/user',  'UserController@index');

修正後

<?php

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/user',  [UserController::class, 'index']);

vs codeを閉じて再度開く

解決することがあります。

その他

どうしても解決しない場合はタイプミスのチェックをしましょう。

私は名前空間やクラス名に複数系の「s」がついているのといないのが混在していて何時間も格闘しました。

コメント

タイトルとURLをコピーしました