Laravel 对不同的控制器重用 URI
Laravel reuse URIs with different controllers
我正在玩 Laravel 5.3 中的一个副项目。我有不同的用户类型(例如管理员、学生等),它们是用户模型的属性:
$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。例如仪表盘。我希望事情保持一致,并且我不想在必须重用的每个控制器方法中都进行帐户检查。
我试过在中间件中限制路由的加载,但是只能在中间件中抛出异常,不能说"Ignore this group if the middleware fails"。
希望我已经解释得足够好,但如果需要更多信息,请发表评论并告诉我。
我的问题是:
如何为不同的控制器重用相同的 URI
在路由过程中什么时候检索经过身份验证的用户?
1) 与选项一样,您仍然可以在路由文件中重定向用户以保持控制器清晰:
\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) 我想用户在访问仪表板时已经通过身份验证 URL,因此您可以使用 \Auth::user()
获取它
我正在玩 Laravel 5.3 中的一个副项目。我有不同的用户类型(例如管理员、学生等),它们是用户模型的属性:
$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。例如仪表盘。我希望事情保持一致,并且我不想在必须重用的每个控制器方法中都进行帐户检查。
我试过在中间件中限制路由的加载,但是只能在中间件中抛出异常,不能说"Ignore this group if the middleware fails"。
希望我已经解释得足够好,但如果需要更多信息,请发表评论并告诉我。
我的问题是:
如何为不同的控制器重用相同的 URI
在路由过程中什么时候检索经过身份验证的用户?
1) 与选项一样,您仍然可以在路由文件中重定向用户以保持控制器清晰:
\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) 我想用户在访问仪表板时已经通过身份验证 URL,因此您可以使用 \Auth::user()
获取它