エラーメッセージ
Target [App\Xxx\Yyy\ZzzInterface] is not instantiable.
問題のコード
app/Providers/AppServiceProvider.php
<?php
declare(strict_types=1);
namespace App\Providers;
use App\Aws\CognitoIdentityProvider\AdminCreateUser\AdminCreateUser;
use App\Aws\CognitoIdentityProvider\AdminCreateUser\AwsAdminCreateUser;
use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Support\ServiceProvider;
final class AppServiceProvider extends ServiceProvider implements DeferrableProvider
{
/**
* Register services.
*/
public function register(): void
{
$this->app->bind(AdminCreateUser::class, AwsAdminCreateUser::class);
}
}
修正したコード
app/Providers/AppServiceProvider.php
/**
* @return string[]
*/
public function provides(): array
{
return [
AdminCreateUser::class,
];
}
DeferrableProvider
と契約して遅延ロードさせた場合は provides()
に対象のインターフェースを記述する必要があります。
認識しない場合
それでも認識しない場合はキャッシュクリアとオートローダーの再生成をお試しください。
$ php artisan optimize:clear
$ composer dump-autoload
まとめ
- サービスプロバイダーが作成されていない
-
config/app.php
にサービスプロバイダーが登録されていない -
DeferrableProvider
と契約している場合はprovides()
にインターフェースを登録 - キャッシュクリアする