eyf / laravel-autoroute
Laravel YAML 路由
v3.0.0-alpha.19
2023-06-25 05:02 UTC
Requires
- php: >=7.2.5
- cebe/php-openapi: ^1.7
Requires (Dev)
- laravel/framework: ^9.34
- laravel/sanctum: ^3.0
- orchestra/testbench: ^7.9
- phpunit/phpunit: ^9.5
- dev-master
- v3.0.0-alpha.19
- v3.0.0-alpha.18
- v3.0.0-alpha.17
- v3.0.0-alpha.16
- v3.0.0-alpha.15
- v3.0.0-alpha.14
- v3.0.0-alpha.13
- v3.0.0-alpha.12
- v3.0.0-alpha.11
- v3.0.0-alpha.10
- v3.0.0-alpha.9
- v3.0.0-alpha.8
- v3.0.0-alpha.7
- v3.0.0-alpha.6
- v3.0.0-alpha.5
- v3.0.0-alpha.4
- v3.0.0-alpha.3
- v3.0.0-alpha.2
- v3.0.0-alpha.1
- v3.0.0-alpha
- v2.0.0
- v1.0.0
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- 0.4.1
- 0.4
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
- dev-dependabot/composer/symfony/http-kernel-5.4.20
This package is auto-updated.
Last update: 2024-09-25 07:59:44 UTC
README
Autoroute 帮助您将 Laravel 路由注册为 YAML 格式。
"La route? Là où on va, on a pas besoin... De route."
安装
composer require eyf/laravel-autoroute
用法
<?php // app/Providers/RouteServiceProvider.php use Eyf\Autoroute\Autoroute; class RouteServiceProvider extends ServiceProvider { public function map(Autoroute $autoroute) { $autoroute->load(["api.yaml"]); } }
注意: 它会自动在 Laravel routes/
文件夹内查找文件。
示例 api.yaml
domain: api.example.org prefix: v1 middleware: - api namespace: App\Http\Controllers\Api paths: "users": get: uses: UserController@index post: uses: UserController@store "users/{id}": get: uses: UserController@find put: uses: UserController@update
或使用 紧凑语法
domain: api.example.org prefix: v1 middleware: - api namespace: App\Http\Controllers\Api paths: "users": get: user.index post: user.store "users/{id}": get: user.find put: user.update
模板参数
Autoroute 支持 YAML 文件中的轻量级参数。格式为 %<parameter_name>%
。
例如,假设您需要处理本地 API 子域名
<?php // app/Providers/RouteServiceProvider.php use Eyf\Autoroute\Autoroute; class RouteServiceProvider extends ServiceProvider { public function map(Autoroute $autoroute) { $parameters = [ "app_domain" => env("APP_DOMAIN", "example.org"), ]; $autoroute->load(["api.yaml"], $parameters); } }
并在您的本地 .env
文件中
APP_DOMAIN=localhost:8000 # APP_DOMAIN=example.org # PROD
并在您的 api.yaml
文件中
domain: api.%app_domain% prefix: v1 # ...
默认路由名称
如果您在路由定义中没有提供 as
选项
"users/{id}": get: uses: UserController@find as: my_user_find_route_name
Autoroute 将基于当前命名空间、控制器和动作名称生成默认路由名称
"users/{id}": get: uses: UserController@find # as: api.user.find (generated)
自定义默认路由名称
如果您对默认路由名称格式不满意,可以实现自己的 Eyf\Autoroute\RouteNamerInterface
并在您的 Laravel 应用程序服务提供者中相应地绑定它
<?php // app/Providers/AppServiceProvider.php use Eyf\Autoroute\RouteNamerInterface; use App\Services\MyRouteNamer; class AppServiceProvider extends ServiceProvider { public function register() { $this->app->bind(RouteNamerInterface::class, MyRouteNamer::class); } }
uses
紧凑语法
如果您没有使用任何路由选项(如 as
等),您可以使用 "紧凑" 语法来指定控制器
domain: api.%app_domain% prefix: v1 middleware: - api namespace: App\Http\Controllers\Api paths: "users": get: user.index post: user.store "users/{id}": get: user.find put: user.update
自定义紧凑语法
您可以通过实现 RouteNamerInterface::getUses(string $compact)
来自定义简写语法。