状況
Laravelに備え付けの認証機能を使って、Googleの認証を実装する時のこと。
LoginControllerに処理を書き、route/web.phpに以下のルーティングを設定した。
route/web.php
Route::get('login/google', 'Auth\LoginController@redirectToGoogle');
Route::get('login/google/callback', 'Auth\LoginController@handleGoogleCallback');
エラー内容
Webページに表示されたエラー文はこちら。
Illuminate\Contracts\Container\BindingResolutionException
Target class [Auth\LoginController] does not exist.
Illuminate\Container\Container::build
vendor/laravel/framework/src/Illuminate/Container/Container.php:835
LoginControllerが見つからないとのこと。
原因の検証
このパターンのエラーで私がこれまで経験した例では、以下ような問題が原因…。
・namespaceが定義されていない
・ルーティングファイルに書いているパスが不完全、誤っている
・ルーティングファイルに使いたいコントローラーをuseしていない
解決法
今回はnamespaceの定義部分がコメントアウトになっていました。
app/Providers/RouteServiceProvider.php
protected $namespace = 'App\\Http\\Controllers';
この部分のコメントアウトを外すと、エラーは解消しました。