vaened / laroute
一个增强的 Laravel 扩展,可以将命名路由导出到 JavaScript 中,允许您使用路由名称而不是 URL。支持按模块化应用进行路由分组。
Requires
- php: ^8.2
- lambdish/phunctional: ^2.1
- laravel/framework: ^10.21|^v11.15
- vaened/support: ^4.0
Requires (Dev)
- mockery/mockery: ^1.6
- orchestra/testbench: ^8|^9
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-09-23 21:36:00 UTC
README
vaened\laroute
是一个受 aaronlord/laroute 启发的 PHP 库,旨在帮助 Laravel 开发者在不硬编码 URL 的情况下管理其应用的 JavaScript 路由。该库通过引入模块化路由更进一步,允许您根据 URL 模式将路由分离到不同的模块中。每个模块生成自己的路由文件,这使得管理您的应用路由结构变得更加容易和可扩展。

安装
Laroute 需要 PHP 8.2。要获取最新版本,只需使用 Composer 需求项目。
composer require vaened/laroute
发布配置文件。
php artisan vendor:publish --tag='laroute'
现在,根据您的配置生成路由并导出 JavaScript 服务。
php artisan laroute:generate
用法
该库包含必要的 javascript
服务来解释导出的路由,以及相应的 d.ts
类型定义,用于 typescript
。
在配置文件中的库选项中配置了服务的位置。
JavaScript / Typescript
一旦服务被导出到配置文件中定义的位置,您就可以轻松创建一个新文件,并通过传递包含路由的文件作为参数来导出服务创建。
import {RouteService} from "./laroute"; import routes from "./api-routes.json"; const apiRouteService = new RouteService({routes});
现在您可以开始了。
const response = await fetch(apiRouteService.generateFullURL('store.products.lists')) const data = response.json(); console.log(data)
此外,您可以将路由导出为 TypeScript 文件,以在您的编辑器中启用路由自动完成。要实现此目的,只需修改配置文件中的 output
选项。

服务
路由服务提供了三个关键方法来与生成的路由交互
- generateFullURL(name, ?params):生成完整的 URL,包括任何查询字符串参数。
apiRouteService.generateFullURL('admin.products.create', { id: '80768395-4208-4fd7-ac60-c429717014ab', name: 'Notebook' })
返回
{host}/api/admin/products/80768395-4208-4fd7-ac60-c429717014ab?name=Notebook
- createURLWithoutQuery(name, ?params):生成不带任何查询字符串的完整 URL。
apiRouteService.createURLWithoutQuery('admin.products.update', { id: '80768395-4208-4fd7-ac60-c429717014ab', name: 'Notebook' })
返回
{host}/api/admin/products/80768395-4208-4fd7-ac60-c429717014ab
- has(name):检查服务中是否定义了特定路由。
apiRouteService.has('admin.products.list')
如果路由存在,返回
true
,否则返回false
。
最佳实践
为了有效地管理 API 调用,建议创建一个专用文件。您可以将其命名为 Router.{ts, js}
。在此文件中,您可以使用 fetch
或像 axios
这样的库来简化您的 API 交互。您可能导出的示例可能如下所示
import createRouteService, {Parameters} from "./laroute"; import axios, {AxiosRequestConfig, AxiosResponse} from "axios"; import api from "./api.json"; const apiRouteService = createRouteService(api); export const Router = { get(routeName: string, params: Parameters = {}, config: AxiosRequestConfig = {}) { return axios.get(apiRouteService.cleanURI(routeName, params), {params, ...config}); }, post(routeName: string, params: Parameters = {}, config: AxiosRequestConfig = {}) { return axios.post(apiRouteService.cleanURI(routeName, params), params, config); }, patch(routeName: string, params: Parameters = {}, config: AxiosRequestConfig = {}) { return axios.patch(apiRouteService.cleanURI(routeName, params), params, config); }, // ... };
配置
默认配置对于大多数项目来说是足够的,允许您简单地导出路由并开始工作,而无需任何额外的设置。
有关自定义选项,请参阅配置文件中的注释 laroute.php。
高级
对于大型项目,其中不同的客户端消耗 API,您可以根据模块化方式配置路由导出。这允许您创建所需数量的模块,每个模块对应不同的 URL 段。
例如,您可以为 /api/store
创建一个模块,为 /api/admin
创建另一个模块,这将生成两个单独的路由文件。
'modules' => [ [ 'match' => '/api/store', 'name' => 'store', 'rootUrl' => 'https://store.aplication.com', 'absolute' => true, 'path' => 'resources/routes', ], [ 'match' => '/api/admin', 'name' => 'admin', 'rootUrl' => 'https://admin.aplication.com', 'absolute' => true, 'path' => 'resources/routes', ], ]
功能
- 模块化路由:根据 URL 模式(例如,/api、/admin、/user)定义和分离路由,每个模块生成一个单独的 JSON 文件。
- 无缝集成 Laravel:自动从您的 Laravel 路由生成 JavaScript 路由,确保应用程序的一致性。
- TypeScript 支持:包含一个与 TypeScript 兼容的 JavaScript 文件,允许您在前端代码中使用强类型路由定义。
- 可定制 URL:生成具有可定制前缀和根 URL 的绝对或相对 URL,让您完全控制 URL 的构建方式。
- 灵活配置:轻松配置模块和路由匹配条件以适应您项目的需求,无论是单体应用还是模块化应用。
许可证
此库采用 MIT 许可证授权。有关更多信息,请参阅 许可证
文件。