Laravel 的路由文件可能会变得非常庞大。不知不觉中,你就需要在路由文件中搜索才能找到任何东西。那么,如何解决这个问题呢?
你可以根据自己的喜好,选择多种方法来解决这个问题。在本教程中,我将介绍我见过的一些方法,最后阐述我的方法以及我为什么选择这种方法。
我将举一个简单的例子,但你可以稍微发挥一下想象力!假设我们正在构建一个 API 应用程序,该应用程序允许客户从产品目录在线订购商品,并允许他们的客户跟踪发货情况。
路线服务提供商
使用路由服务提供商,您可以轻松添加其他路由条目。我们来看一个例子:
班级
路由服务提供者
延伸
服务提供者{
民众
功能
引导
()
:
空白{
$this
->
配置速率限制
();
$this
->
路线
(
功能
()
:
空白
{
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/api.php'
));});}}
这与默认设置类似。
RouteServiceProvider
您可以在 Laravel 项目中获得此功能。具体实现可能因应用程序的开发时间而异。我们如何扩展此功能?我们可以在提供程序中添加额外的路由加载:
班级
路由服务提供者
延伸
服务提供者{
民众
功能
引导
()
:
空白{
$this
->
配置速率限制
();
$this
->
路线
(
功能
()
:
空白
{
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/api.php'
));
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/resource/catalog.php'
));
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/resource/orders.php'
));
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/resource/payments.php'
));
路线
::
中间件
(
‘api’
)
->
团体
(
基本路径
(
'routes/resource/deliveries.php'
));});}}
这并非旨在做到完全精确。我只是想用这个例子来说明一些可能至少有 75 条路径的复杂部件。所以,我们在这里进行管理……
RouteServiceProvider
所以一切都围绕着路由的加载方式展开。我发现这种方法最大的问题在于,在路由文件中,你需要知道还加载了哪些其他内容。我之前参与过一个使用这种方法的大型应用程序,需要花费大量精力去反复检查路由是否加载完毕以及它们的加载顺序是否会导致问题。
第一次打开 Laravel 项目时,你需要关注几个关键方面:Eloquent 模式、路由和测试。打开路由文件,查看已注册的路由,以了解应用程序的规模和结构。
需要文件
如果您安装了 Laravel Breeze,您会注意到它会将以下内容添加到您的……
routes/web.php
文件:
要求
__你__
。
'/auth.php'
;
这会加载软件包自带的身份验证路由,使你的服务提供商更加精简,并让你了解需要检查多少额外的文件才能查看所有路由。让我们以上面的示例为例,并按照这种方法添加路由:
// 你的 `routes/api.php` 文件的其余部分要求
__你__
。
'/resource/catalog.php'
;要求
__你__
。
'/resource/orders.php'
;要求
__你__
。
'/resource/payments.php'
;要求
__你__
。
'/resource/deliveries.php'
;
在我看来,这比服务提供商模式有所改进,因为在浏览路由文件时,应用程序的可见性会更高。然而,我非常讨厌引入这些文件。这感觉很混乱,也很敷衍。
好处在于,您可以在一个简洁的位置查看所有路由所需的加载项,位置与您期望查看路由的位置一致。然而,缺点是它只是一个必需的方法,用于在执行此脚本时加载文件。
在我看来,这方面还有很大的改进空间。这里没有说明 URL 结构是什么样的,也没有说明是否有任何额外的中间件应用于所有路由。
路由组
这是我更倾向的方法。我们看到它们在以下方面得到应用:
RouteServiceProvider
这就是我获得灵感的地方。这里的基本原理是,在你的主路由文件中(
routes/api.php
在我们的例子中),我们像手动添加路由一样构建路由组,然后告诉该组它需要使用单独的文件。
// 你的 `routes/api.php` 文件的其余部分路线
::
前缀
(
'目录'
)
->
作为
(
'目录:'
)
->
中间件
([
‘授权:批准’
])
->
团体
(
基本路径
(
'routes/resources/catalog.php'
),(英文):路线
::
前缀
(
“命令”
)
->
作为
(
'订单:'
)
->
中间件
([
‘授权:批准’
])
->
团体
(
基本路径
(
'routes/resources/orders.php'
),(英文):路线
::
前缀
(
“付款”
)
->
作为
(
'付款:'
)
->
中间件
([
‘授权:批准’
])
->
团体
(
基本路径
(
'routes/resources/payments.php'
),(英文):路线
::
前缀
(
“交付”
)
->
作为
(
'交付:'
)
->
中间件
([
‘授权:批准’
])
->
团体
(
基本路径
(
'routes/resources/deliveries.php'
),(英文):
如上图所示,我们只是使用了
base_path
辅助函数用于将路由加载到正确的位置。查看路由文件,我们可以看到应用程序的路由组是如何构建的,但它并没有占据整个文件——即使最终有 20-30 个路由组,文件仍然非常易读。
从这里,我们可以在专用路由文件中管理“资源”和“子资源”,这意味着导入时类名类会更少,并且拥有专用文件,您可以轻松地单独理解这些文件,或者在整个应用程序的内容中理解这些文件。
如何应对庞大的路由文件带来的认知负担?您是否找到了什么有趣的方法想要分享?欢迎在 Twitter 上告诉我们。






