許可されたユーザー (ミドルウェア認証) とゲスト (ミドルウェア ゲスト) に同じ URI で異なるコントローラーを使用しようとしていますが、laravel 5.3 で動作させることができません。
同じ URI で異なるミドルウェアで 2 つのルートを作成しようとしましたが、同じ URI で 2 つのルートを作成することはできません。
私は多くのことを試しましたが、laravel 5.3ではAuth::check()
routesファイルで使用できず、常にfalseを返します:
Route::get('/', [
'as' => 'home',
'uses' => (Auth::check() ? 'User\DashboardController' : 'Guest\HomeController'),
]);
また、ルートで関数を使用しようとしました:
Route::get('/', [
'as' => 'home',
'uses' => function (){
$app = app();
if(Auth::check()){
$controller = $app->make('App\Http\Controllers\User\DashboardController');
return $controller->callAction('getIndex', $parameters = []);
}else{
$controller = $app->make('App\Http\Controllers\Guest\HomeController');
return $controller->callAction('getIndex', $parameters = []);
}
}
]);
現在Auth::check()
はほとんど動作しますが、コントローラー__construct
関数のミドルウェアは無視されます。そして、これはあまり見栄えがよくありません。
ログインからこのルートにリダイレクトすると、Auth::check()
false が返されるという問題もあります。しかし、ページを更新すると、true が返されます。
1 つのコントローラーを使用して、そのコントローラーでユーザーとゲストの両方を処理したくありません。これは、ユーザー コントローラーがゲスト コントローラーとは別のクラスを拡張するためです。
ゲスト用のコントローラーと許可されたユーザー用の異なるコントローラーを使用して1つのルートを作成する方法を誰かが知っていますか?