Php 如何创建动态路线?

Php 如何创建动态路线?,php,laravel,routing,acl,Php,Laravel,Routing,Acl,我有这样一条路: http://localhost:8000/home 我希望当普通用户打开上面的路径时,我调用此控制器: mainPage@index panelPage@index 但当管理员打开该路径时,我称此控制器: mainPage@index panelPage@index 如你所见,我在寻找“动态路线”这类。。实现这一点可能吗?换句话说,我可以为管理员和普通成员调用两个不同的控制器吗?这是一个用于过滤HTTP请求的好例子 您还可以在路由文件中执行一些有条件的操作,例如:

我有这样一条路:

http://localhost:8000/home
我希望当普通用户打开上面的路径时,我调用此控制器:

mainPage@index
panelPage@index
但当管理员打开该路径时,我称此控制器:

mainPage@index
panelPage@index

如你所见,我在寻找“动态路线”这类。。实现这一点可能吗?换句话说,我可以为管理员和普通成员调用两个不同的控制器吗?

这是一个用于过滤HTTP请求的好例子

您还可以在路由文件中执行一些有条件的操作,例如:

if (Auth::user()->isAdmin()){
    Route::get('/', 'panelPage@index');
} 
else {
    Route::get('/', 'mainPage@index');
}
根据应用程序的外观,可以在用户模型中定义isAdmin()。这是一个非常简单的示例,其中有一个名为role_id的列,id nr 1等于admin。如果经过身份验证的用户是admin,则显示true,否则显示false:

public function isAdmin()
    {
       return Auth::user()->role_id == 1;
    }
一种更动态、更高级的方法是创建一个角色表,并将角色与用户关联到一个角色\用户透视表


如果希望它更进一步,可以创建权限表,并将角色与权限关联到权限\角色透视表。然后,您可以在应用程序中定义执行操作所需的权限,并添加给定用户角色在该透视表中拥有的所有权限。然后,您只需检查用户(具有特定角色)是否具有给定的权限

为了获得最佳实践,您可以使用对路由和控制器进行分类

在这种相对简单的情况下,您还可以使用如下内容(在routes文件中):

更新

或者,您可以将此if语句中的所有内容包装到auth中间件组中,如下所示:

Route::group(['middleware' => ['auth']], function(){
   $uses = 'mainPage@index';
    if(Auth::user()->admin) {
     $uses = 'panelPage@index';
    }
    Route::get('/', $uses);
});

还要确保用户表中有一个名为“admin”的列。

是的,这是可能的。您可以创建中间件组。你在用拉威尔的授权吗?您已经创建了类似AdminMiddleware的东西吗?@JanWillem我知道当前用户是admin还是常规成员,如下所示:
@if(Auth::user()->admin){//admin}else{//regular member}
它抛出以下错误:
在null上调用成员函数isAdmin()
isAdmin在这种情况下只是一个示例,您需要定义什么是“isAdmin()”。如何定义它取决于应用程序的设计方式。如果用户表中有一个“role_id”,那么可以创建一个名为isAdmin()的方法,用于检查相应的role_id是否是管理员的。因此,当您调用isAdmin()时,请检查用户是否具有正确的角色id。我将用一个示例更新答案。您的代码会抛出以下错误:
ErrorException in routes.php第18行:尝试获取非对象的属性