recoded / dynamic-routes
创建基本动态路由的库(例如基于语言)
Requires
- php: ^7.4
- laravel/framework: ^6.0 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
This package is auto-updated.
Last update: 2024-06-23 12:11:20 UTC
README
此包允许您拥有基本的动态可缓存路由。
安装
composer require recoded/dynamic-routes
该包具有自动发现功能,如果不起作用,则应在配置文件中 Providers 部分添加 Recoded\DynamicRoutes\RouteServiceProvider
到您的 app.php
。
php artisan vendor:publish --provider="Recoded\DynamicRoutes\RouteServiceProvider"
此步骤是可选的,但如果你想更改 DynamicRouteResolver
则是必须的。
工作原理
该包基于 DynamicRouteResolver
接口/合同。它强制你提供一个数组,包含动态变量可以接收的所有可能的值,以便预先缓存路由及其所有变体。此合同还有一个 resolve
方法,用于检索当前动态值。(这作为 Laravel 路由器上 dynamic
宏的回调的第一个参数传递)
用法
该包附带默认的 LocaleRouteResolver
,它查看应用程序的当前区域设置,例如使用 app()->setLocale()
设置,并使用您语言资源内部的所有文件夹作为可能的值。当您有一个例如根据 URL 的第一个部分(例如 /en, /nl, /de)或子域确定应用程序区域设置的 ServiceProvider 时,这很有用。(无状态数据)
示例
我认为不需要解释 DynamicRouteResolver
,它非常直观。但这里有一个示例,展示你可以根据例如语言加载不同的路由。
Route::dynamic(function (string $key) { require sprintf('%s/%s.php', __DIR__, $key); });
这允许你为你的应用程序支持的每种语言分别创建文件。但你也可以使用例如 trans()
辅助函数来翻译你的路由。
警告
DynamicRouteResolver
在中间件之前解析,因此你将无法使用会话值。这是有意义的,因为路由发生在中间件之前。