antoninmasek/laravel-route-directory-macro

向Route外观添加Route::loadFromDirectory宏,该宏将加载目录内所有包含路由的文件。

0.1.0 2024-06-14 10:08 UTC

This package is auto-updated.

Last update: 2024-09-14 10:38:59 UTC


README

Latest Version on Packagist Total Downloads

此包在Route外观上注册了loadFromDirectory宏。使用此宏,您可以从目录内的多个文件中轻松加载所有定义的路由。

安装

您可以通过composer安装此包

composer require antoninmasek/laravel-route-directory-macro

宏背后的动机

虽然将所有路由放在单个文件中完全没问题,但我发现我经常需要多个文件。出于某种原因,我更喜欢每个实体或域有一个单独的文件。为了使路由注册过程对我来说更容易,我写了一段简单的代码,我从项目复制到项目。所以我就把它打包起来,这样我就不必再这样做。

基本用法

考虑以下路由目录结构

routes/
│
├── app/
│   ├── users.php
│   ├── tasks.php
│   └── media.php
│
└── public/
    └── auth.php

传统上,我们必须在web.php或其他路由入口点中require每个文件。另一种选择是在bootstrap/app.php(或Laravel 10及以下版本中的RouteServiceProvider)中注册每个文件。

使用此包,我们只需执行以下操作

Route::loadFromDirectory(
    path: 'routes/app',
    middleware: ['web', 'auth'],
);

Route::loadFromDirectory(
    path: 'routes/public',
    middleware: ['web'],
);

这将注册这两个目录内所有文件的路线。第一个调用从routes/app目录注册路线并分配webauth身份验证中间件,第二个调用从routes/public目录注册路线并仅分配web中间件。

Laravel 11.x或更高版本

bootstrap/app.php中使用它

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
        then: function () {
            Route::loadFromDirectory(
                'routes/app',
                ['web', 'auth'],
            );
        },
    )

Laravel 10.x及以下版本

RouteServiceProvider.php中使用它

public function boot(): void
{
    $this->configureRateLimiting();

    $this->routes(function () {
        Route::loadFromDirectory(
            'routes/app',
            ['web', 'auth'],
        );
    });
}

参数

路径

唯一的必需参数是包含您的路由文件的目录路径。宏在后台使用base_path辅助函数,路径相对于项目的基路径。

如果您想使用绝对路径,您必须在路径字符串的开始处有/。然后不会使用base_path辅助函数。

中间件

这是一个数组,您可以在其中指定应应用于指定目录中路由的中间件。

前缀

如果您指定了一个前缀,则目录中的所有路由都将被前缀化。让我们看看以下示例

Route::loadFromDirectory(
    path: 'routes/admin',
    middleware: ['web', 'auth', 'admin'],
    prefix: 'admin',
);

然后所有路由都将有admin/前缀

名称

默认情况下,当您指定前缀时,名称将自动成为以.结尾的前缀。所以对于前缀admin,名称将是admin.

如果您想使用自己的名称,只需将其作为第四个参数传递。或者如果您想只使用前缀而不设置任何名称,则将名称参数设置为false

隐藏文件

默认情况下,宏排除了以.开头的文件,以防止加载隐藏文件。您也可以利用这一点,在您不希望立即加载的路由文件中使用。只需将其以点为前缀即可。例如 routes/.secret.php

在特定环境中加载隐藏文件

为了更好地利用隐藏文件,您可以指定希望它们被加载的环境。当您想在local环境中工作新路由,但尚未在生产环境中使用时,这非常有用。

要完成此操作,您应该发布配置文件并在register_hidden_routes_in_environments配置数组中指定所需的运行环境。

return [
    /*
     * List of environments in which hidden routes (route files with `.` prefix) should be registered.
     *
     * This is useful for working on new routes in certain environments (usually local), while
     * ensuring they are not registered in any other environment (usually production).
     */
    'register_hidden_routes_in_environments' => [],
];

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件