私はLaravel 5.3のサイドプロジェクトで遊んだとURIを再利用します。私は、(管理者、学生などなど)さまざまなユーザータイプを持っている、と彼らはユーザモデルのプロパティです:Laravelは異なるコントローラ
$user->account_type; // administrator
各ユーザータイプは、独自のダッシュボード(および他のコントローラ)を有し、それらの名前空間:
Controllers\Administrator\DashboardController;
Controllers\Student\DashboardController;
すべての私のコントローラとビューなど、すべてのアカウントの種類に基づいて名前空間されています。
すべてのユーザー(種類にかかわらず)はdomain.com/dashboard
となり、アカウント固有のコントローラにリダイレクトされます。
しかしlaravelはルートのみファイルの最後の重複URIを認識しています。私はRouter.php
とRouteCollection.php
ファイルを読んでいます。URIは配列のキーとして保存されているため、再利用しようとすると常に上書きされているようです。
私はこれを試してみました誰かと別のスレッドを見てきた、と私ははIFのその中に(このような)を持つ単一のコントローラを持っている必要はありません:
public function index()
{
if ($request->user()->account_type == 'administrator') {
/** **/
} elseif ... {
}
}
私はドンの理由」私はいくつかのURIを再利用するだけなので、再利用されたURIのための単一のコントローラを必要としません。例えば、ダッシュボード。私は物事が一貫して欲しい、私は再利用する必要がある各コントローラメソッドでアカウントのチェックを行う必要はありません。
私はミドルウェア内のルートのロードを制限しようとしましたが、私は唯一のミドルウェアで例外を投げることができる、私は、「ミドルウェアが失敗した場合、このグループを無視」と言うことはできません。
がうまくいけば、私はそれが十分に説明したが、さらに情報が必要な場合は、コメントと私に知らせてくださいました。私の質問は:
ルーティング処理で取得し、認証されたユーザであるとき、私は別のコントローラ
に同じURIを再利用できますか?私はダッシュボードのURLにアクセスするときに、ユーザーがすでに認証されると仮定)
\Route::get("dashboard", function(){ switch(\Auth::user()->account_type){ case 'admin': return (new \App\Http\Controllers\Admin\DashboardController)->index(); break; case 'student': return (new \App\Http\Controllers\Student\DashboardController)->index(); break; } });
2を、ので、次のことができます。
おかげで、私は、これは現時点では私の問題に対する最善の解決策になるだろうと思います:) –