首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉威尔:有办法把路线组织成层次树吗?

拉威尔:有办法把路线组织成层次树吗?
EN

Stack Overflow用户
提问于 2019-01-15 11:12:25
回答 2查看 1.2K关注 0票数 2

我的user模型有不同的角色,它们之间存在着inheritance关系,例如: admin是superadmin的一个子类。

我试图在我的路由上放弃这种关系,以便组织它们并避免这样的路由:

代码语言:javascript
复制
Route::group(['namespace' => 'Admin\MultiDispatch', 'middleware' => ['auth.jwt:superadmin|admin']], function () {

 });

我将每个角色路由移动到Admin.php & SuperAdmin.php文件中,并需要routes.php中的文件

代码语言:javascript
复制
 /*ADMIN ROLES*/
Route::group(['middleware' => ['auth.jwt:admin']], function () {
    require base_path('routes/roles/Admin.php');
});

/*SUPERADMIN ROLES */
Route::group(['middleware' => ['auth.jwt:superadmin']], function () {
    require base_path('routes/roles/SuperAdmin.php'); 
});

superadmin.php中,我再次要求Admin.php文件,因为superadmin应该扩展所有admin路由:

代码语言:javascript
复制
 <?php
    require base_path('routes/roles/Admin.php');

但是,Admin.php中存在的端点似乎只能用于superadmin访问。除了提到管理路由中的超级管理之外,还有其他方法在路由文件中实现继承概念吗?

代码语言:javascript
复制
 /*ADMIN ROLES*/
 Route::group(['middleware' => ['auth.jwt:admin,superadmin']], function () {
    require base_path('routes/roles/Admin.php');
 });

特别是我的树很长,在管理下有这么多的角色

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-15 12:06:47

是的,您可以通过在routes文件夹中创建新的路由文件来完全分离它们,然后映射它们。

  • 在您的admin.php文件夹中创建/routessuperadmin.php路由。
  • 转到app/Providers/RouteServiceProvider.php
  • 如果希望为它们拥有独立的控制器,请为它们创建单独的命名空间:
代码语言:javascript
复制
    public function map()
    {
        ...
        $this->mapAdminRoutes();
        $this->mapSuperAdminRoutes();
        ...
    }

    protected function mapAdminRoutes()
    {
        Route::prefix('admin')
            ->middleware(['web', 'auth.jwt:admin'])
            ->namespace('App\Http\Controllers\Admin')
            ->name('admin.')
            ->group(base_path('routes/admin.php'));
    }

    protected function mapSuperAdminRoutes()
    {
        Route::middleware('web', 'auth.jwt:superadmin')
            ->namespace('App\Http\Controllers\SuperAdmin')
            ->name('superadmin.')
            ->group(base_path('routes/superadmin.php'));
    }

检查namespace,这意味着您可以在不同的文件夹中放置不同的控制器,例如。App\Http\Controllers\Admin中的管理控制器,因此您可以在app/Http/Controllers中创建一个名为Admin的文件夹。然后,在控制器中,将命名空间更改为namespace App\Http\Controllers\Admin;,然后更改为use App\Http\Controllers\Controller;,以找到正在扩展的BaseController。

prefix:/{前缀}/您的路由-这里

name:给你的路线组命名,例如。route('superadmin.users.add')

namespace:您的控制器在哪里

group:您的路由文件在哪里

在路由文件中,您可以像普通来宾/web路由一样添加路由。只需一个接一个地添加它们,甚至重新组合它们。但是,为了方便起见,上面的内容已经按前缀进行了分组:/admin or /superadmin,并命名为admin. or superadmin.,以及附加的中间件。

在控制台/终端中键入php artisan route:list并查看结果!

有了以上这些,我总是将我的/admin/dashboard/ (来宾)路线分开。这样清洁多了!:)

票数 4
EN

Stack Overflow用户

发布于 2019-01-15 11:42:21

中间件组

你可以用一种我认为适合你的需要的方式把餐具组合在一起;

代码语言:javascript
复制
Route::middleware(['auth.jwt:admin'])->group(function(){

  // Routes that need admin middleware access go here

  Route::middleware([''auth.jwt:superadmin''])->group(function(){

    // Routes that need admin AND superadmin middleware access go here

  });

});

这应该允许您只在彼此内部嵌套中间件组,以提供路由的分层列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54197720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档