• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何大型 Laravel 项目中组织路由

php 搞代码 4年前 (2022-01-20) 12次浏览 已收录 0个评论

想象一下一个拥有 100 多个路由的 Laravel 项目,其中包括访客,用户,管理员等分离的模块。你真的要将所有内容写在在一个文件中吗?那么如何将它们分组,并且为 URL 添加前缀呢?看看有哪些办法

1. 分离 WEB 和 API 路由

这个简单,因为 Laravel 已经帮你做了。有如下两个文件:

routes/web.php

routes/api.php

因此,如果你的项目同时具有前端页面和 API (使用场景越来越广),请把 API 的路由放在 api.php 里。

例如,如果你有 /users 页面,又有 /api/users/ 端点,把他们分别写在自己属于自己路由文件里,以免在同一文件中出现同一相同名称而产生混淆。

但我最近还是从 官方 Laravel 项目中看到了反例。在 Laravel Horizon 中,Taylor 只有 API 路由,但他没有分开写,还是写在了 routes/web.php :

另一个例子证明 Laravel 还是非常的个人化,甚至 Taylor 自己也没有 100% 按照标准来。

2. 把 routes/web.php 文件分组结构化

下面例子也是来自 Laravel 官方文档 的示例:

Route::middleware(['first', 'second'])->group(function () {    Route::get('/', function () {        // 使用 first 和 second 中间件    });    Route::get('user/profile', function () {        // 使用 first 和 second 中间件    });});

最基本的用法是将不同的路由分组包含在不同的中间件里面。例如,你希望一个组默认受 auth 中间件限制,另一组受单独的 admin 自定义中间件限制等。

这样,你还可以使用 名称 和 前缀 等路由分组方法。同样,官方文档中给出了示例:

Route::prefix('admin')->group(function () {    Route::get('users', function () {        // 匹配 URL 「/admin/users」    });});Route::name('admin.')->group(function () {    Route<span>@本文来*源gaodai#ma#com搞*!代#%^码$网*</span><textarea>搞gaodaima代码</textarea>::get('users', function () {        // 路由名为 「admin.users」...    })->name('users');});

另外,如果您要将所有中间件 + 名称 + 前缀添加到一个组中,则将它们放入数组中更容易理解:

// 而不是这样做: Route::name('admin.')->prefix('admin')->middleware('admin')->group(function () {    // ...});// 可以使用数组Route::group([    'name' => 'admin.',     'prefix' => 'admin',     'middleware' => 'auth'], function () {    // ...});

我们将其结合为一个拥有三个路由分组的真实示例:

带有 / front / XXXXX URL 且没有中间件的「访客」组

带有 / user / XXXXX URL 和 auth 中间件的「用户」组

带有 / admin / XXXXX URL 和自定义 admin 中间件的「管理员」组

以下是将所有内容分组到 routes / web.php 文件中的一种方法:

Route::group([    'name' => 'admin.',    'prefix' => 'admin',    'middleware' => 'admin'], function () {    // URL链接:/admin/users    // 路由名称:admin.users    Route::get('users', function () {        return 'Admin: user list';    })->name('users');});Route::group([    'name' => 'user.',    'prefix' => 'user',    'middleware' => 'auth'], function () {    // URL链接:/user/profile    // 路由名称:user.profile    Route::get('profile', function () {        return 'User profile';    })->name('profile');});Route::group([    'name' => 'front.',    'prefix' => 'front'], function () {    // 这里没有中间件    // URL链接:/front/about-us    // 路由名称:front.about    Route::get('about-us', function () {        return 'About us page';    })->name('about');});

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何大型 Laravel 项目中组织路由

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址