antoninmasek / laravel-route-directory-macro
向Route外观添加Route::loadFromDirectory宏,该宏将加载目录内所有包含路由的文件。
Requires
- php: ^8.2
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- spatie/laravel-ray: ^1.36
README
此包在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
目录注册路线并分配web
和auth
身份验证中间件,第二个调用从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)。有关更多信息,请参阅许可证文件。