はじめに
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」がついているのといないのが混在していて何時間も格闘しました。
コメント