はじめに
Laravel6を使用しています。Userモデルは初期でApp/Httpディレクトリ直下に作成されるため、モデルが増えるとごちゃつきます。モデルだけでまとめて整理したくなってきます。
合わせてどのコントローラーがどのモデルと結びつくのかも分かりやすくしておきたくなり、それぞれ新しくディレクトリを作成することにしました。
そこでnamespaceをいじったのが全ての始まりでした。
解決方法
■ Target class [~Controller] does not exist.
新しく作ったディレクトリにモデルを移動させるだけでは、namespaceが合わなくなるためエラーを吐かれます。参考サイトはこちら。
今回はHttpの中にModelsを作成し、さらにUsersを入れ子にしています。
namespace App\Http\Models\Users
class User extends Authenticatable
{
// 略
}
コントローラーもUsersディレクトリを作成しました。
namespace App\Http\Controllers\Users;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UsersController extends Controller
{
public function show(Request $request)
{
return view('profile');
}
}
web.phpも一致させます。
Route::namespace('users')->group(function () {
Route::get('/profile', 'UsersController@show')->name('showUsers');
});
おまけ
■ Method Illuminate\Auth\SessionGuard::~ does not exist.
ログイン後のリダイレクト先の名前(HOME)も変更していたため、web.phpをいじったときに「そんなSession Guardはない」と怒られてしまいました。
RouteServiceProviderのHOMEがweb.phpに書いたものと一致するように修正しました。
class RouteServiceProvider extends ServiceProvider{
// 略
public const HOME = 'ここを修正';
}
終わりに
特にルーティング関係では複数のエラーが同時に出たりして「どこから手をつけよう……」と困ってしまうのですが、1つ1つ潰していくと意外とシンプルでした。
参考
-
Laravelで認証機能のエラー。app直下に作ったディレクトリにモデルを格納したら解消した
https://www.takafumitaba.com/laravel-certification -
本気で詳細を理解したい人向けのLaravelログイン認証
https://reffect.co.jp/laravel/laravel-authentification-by-code-base