ميكل ديااس / لارافيل-خطوط-مفردة
为您的 Laravel 应用程序提供简化的路由管理。
Requires
- php: ^8.0
- haydenpierce/class-finder: ^0.5.3
- illuminate/contracts: ^9.0|^10.0
- spatie/laravel-package-tools: ^1.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-05 00:48:52 UTC
README
单文件路由允许您将有关路由的所有内容都放在一个文件中。通过查看路由方法、URI、中间件及其行为,无需跟踪多个文件。
namespace App\Http\Routes\Api\User; use App\Http\ApiRouteGroup; use Illuminate\Http\Request; use MicaelDias\SingleFileRoutes\Routing\Route; #[Route(method: 'GET', uri: '/user/{id}', group: ApiRouteGroup::class)] class Get { /** * Handle the request. */ public function __invoke(Request $request, int $id) { // return view('user', ['id' => $id]); // return new JsonResponse(['id' => $id]); // or any other response supported by Laravel. } }
您仍然可以像以前一样结合使用此包注册路由,这不仅仅是一个一站式解决方案。
兼容性
安装
您可以使用以下命令将单文件路由安装到项目中:
composer require micaeldias/laravel-single-file-routes
安装后,使用 single-file-routes:install Artisan 命令发布资产
php artisan single-file-routes:install
发布单文件路由的资产后,其主配置文件位于 config/single-file-routes.php。
使用方法
单操作控制器
要在单操作控制器中注册路由,只需将 Route 属性添加到类本身即可
#[Route(method: 'GET', uri: '/user/{id}')] class Get { __invoke (Request $request, int $id) { // Handle the request } }
基本控制器
要在基本控制器中注册路由,需要将 Route 属性添加到方法
class UserController { #[Route(method: 'GET', uri: '/user/{id}')] public function show(int $id): View { return view('user.profile', [ 'user' => User::findOrFail($id) ]); } }
路由组
要使用路由组,首先需要创建一个。这可以通过使用 artisan 命令 make:route-group 来轻松完成。
路由组扩展以下接口
interface RouteGroup { /** * The URI prefix for all routes on this group. */ public static function prefix(): string; /** * The middleware used for all routes on this group. */ public static function middleware(): array; /** * Assign this route group to a subdomain. */ public static function domain(): ?string; }
创建您所需的路由组后,您可以在其下开始添加路由。假设我们创建了一个 ApiRouteGroup,要使用它,我们可以在 Route 属性上简单地传递 group 参数,如下所示
#[Route(method: 'GET', uri: '/user/{id}', group: ApiRouteGroup::class)]
路由名称
默认情况下,路由的名称与它们的定义相同,这意味着您只需将类名传递给 Laravel 的 route 方法即可获取 URL。
单操作控制器
use App\Http\Routes\Api\User\Get as UserGet; route(UserGet::class) # https:///api/user
基本控制器
route('App\Http\Controllers\UserController::index()')
自定义路由名称
如果您不喜欢将路由名称与定义相同,您可以在 Route 属性上传递 name 参数
#[Route(method: 'GET', uri: '/user/{id}', name: 'users.show')]
添加中间件
您可以直接在路由或路由组中使用 Laravel 支持的任何中间件。
路由组中间件
要向路由组添加中间件,请从 middleware() 函数返回它
public static function middleware(): array { return [ Authenticate::class, 'throttle:30,1', ]; }
特定路由中间件
如果您需要向单个路由添加中间件,您可以在 Route 属性上传递 middleware 参数
#[Route(method: 'PUT', uri: '/post/{id}', middleware: ['can:update,post'])]
多个路由
如果出于某种原因,您需要控制器响应多个 URI,您可以根据需要堆叠尽可能多的路由
#[Route(method: 'GET', uri: '/user', group: ApiRouteGroup::class)] #[Route(method: 'GET', uri: '/users', group: ApiRouteGroup::class)] public function show(int $id): View
这将使 /user 和 /users 具有相同的行为。
路由缓存
Laravel 的路由缓存完全支持。
实际上,由于路由的发现方式,强烈建议您在生产环境中 缓存您的路由。
Artisan 命令
生成路由组
您可以使用 make:route-group Artisan 命令轻松创建路由组
php artisan make:route-group {name} {?prefix}
假设我们想创建一个 API 路由组
php artisan make:route-group ApiRouteGroup /api
# INFO Route Group [app/Http/Routes/ApiRouteGroup.php] created successfully.
以下是生成的类的样子
namespace App\Http\Routes; use MicaelDias\SingleFileRoutes\Routing\RouteGroup; class ApiRouteGroup implements RouteGroup { /** * {@inheritdoc} */ public static function prefix(): string { return '/api'; } /** * {@inheritdoc} */ public static function middleware(): array { return []; } /** * {@inheritdoc} */ public static function domain(): ?string { return null; } }
生成路由
我们只支持使用 make:route 命令生成单操作控制器。
按照提示生成所需的路由
php artisan make:route
以下是生成的类的样子
namespace App\Http\Routes\Api\User; use Illuminate\Http\Request; use MicaelDias\SingleFileRoutes\Routing\Route; use App\Http\Routes\ApiRouteGroup; #[Route(method: 'GET', uri: '/user', group: ApiRouteGroup::class)] class Get { /** * Handle the request. */ public function __invoke(Request $request) { // @todo handle request } }
请注意,路由生成器是为了您的方便而创建的,但您当然可以根据您的用例手动创建路由或组。
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请审查我们的安全政策了解如何报告安全漏洞。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。
