sebastiaanluca / laravel-router
处理Laravel路由的有组织方法。
Requires
- php: ^7.3
- laravel/framework: ^7.0|^8.0
Requires (Dev)
- kint-php/kint: ^3.3
- mockery/mockery: ^1.3
- orchestra/testbench: ^5.1|^6.0
- phpunit/phpunit: ^8.5
README
处理Laravel中路由的有组织方法。
此包提供了一个易于使用的系统,可以将路由逻辑根据功能分离到routers
中,同时提供额外的功能。它是那些庞大且缺乏结构的web.php
和api.php
路由文件的替代品,这些文件通常缺乏结构,并破坏了Laravel将所有内容分离到类而不是常规PHP文件的结构规范。
请注意,这并不会改变您定义路由的方式。它只是组织它们的一种方式。您可以选择使用它提供的附加功能,但这不是必需的。
目录
要求
- PHP 7.3或更高版本
- Laravel 7.0或更高版本
需要支持早期版本?请尝试之前的包版本。
如何安装
只需使用Composer将包添加到您的项目中,Laravel将自动发现它
composer require sebastiaanluca/laravel-router
进一步可选设置
如果您想能够在单个位置注册您的路由器,请将RegistersRouters
特性添加到您的HTTP内核(位于App\Http\Kernel
)中
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; use SebastiaanLuca\Router\Kernel\RegistersRouters; class Kernel extends HttpKernel { use RegistersRouters; }
如何使用
创建路由器
以下是一个路由器的示例。它可以放置在任何您喜欢的位置,尽管我建议将它们分组在App\Http\Routers
目录中。
<?php namespace App\Http\Routers; use SebastiaanLuca\Router\Routers\Router; class UserRouter extends Router { /** * Map the routes. */ public function map() { $this->router->group(['middleware' => ['web', 'guest']], function () { $this->router->get('/users', function () { return view('users.index'); }); }); } }
在map
方法中,您应该定义您的路由,这是使用路由器的唯一要求。Laravel路由实例会自动从IoC容器中解析,因此您可以使用任何标准路由功能。当然,您也可以使用Route
外观。
注册路由器
要自动让框架加载您的路由器并映射其路由,请添加特性并将路由器添加到您的应用程序HTTP内核类中的$routers
数组中
/** * The application routers to automatically boot. * * @var array */ protected $routers = [ \App\Http\Routers\UserRouter::class, ];
手动注册路由器
如果您不想或不能将特性添加到内核中,您也可以通过实例化它来手动注册路由器(例如在服务提供者中)。父级基本路由器将自动解决所有依赖关系,并在您的路由器上调用 map
方法。
app(\App\Http\Routers\UserRouter::class);
在包中特别有用!
可选特性
要使用以下可选特性,请注册 RegisterRoutePatterns
类
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; use SebastiaanLuca\Router\Kernel\RegistersRouters; class Kernel extends HttpKernel { use RegistersRouters; /** * The application routers to automatically boot. * * @var array */ protected $routers = [ \SebastiaanLuca\Router\Routers\RegisterRoutePatterns::class, ]; }
常见的路由参数模式
Laravel提供了一种方便的方法,使用路由中的 模式 验证URL参数。本包提供一组预定义的模式,因此您无需在每次路由中重复添加它们或自己定义它们。以下参数模式目前包括
- id (
\d+
) - hash (
[a-z0-9]+
) - uuid (
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
) - slug (
[a-z0-9-]+
) - token (
[a-zA-Z0-9]{64}
)
所以,忘了写
Route::get('user/activations/{uuid}', function ($uuid) { return view('users.activations.show'); })->where('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}');
只需在您的路由中使用 {uuid}
或任何其他模式即可
$this->router->get('user/activations/{uuid}', function ($uuid) { return view('users.activations.show'); });
全域名路由
Laravel的另一个优秀功能是 子域名路由,它允许您在单个Laravel项目中处理多个子域名。唯一的缺点是它只做这一点,不处理全域名。
Laravel路由器为您解决了这个问题,因此您可以一次性将多个域名定向到单个Laravel项目并处理它们。只需定义一个具有 {domain}
模式的路由组,并在回调或控制器中使用它即可
$this->router->group(['domain' => '{domain}'], function () { $this->router->get('user/{id}', function ($domain, $id) { return 'You\'re visiting from ' . $domain; }); });
许可
此包在MIT许可(MIT)下运行。有关更多信息,请参阅 LICENSE。
变更日志
请参阅 CHANGELOG 了解最近更改了什么。
测试
composer install
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING 和 CONDUCT。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 hello@sebastiaanluca.com 而不是使用问题跟踪器来联系。
致谢
关于
我叫Sebastiaan,是一名自由职业的Laravel开发者,专注于构建定制的Laravel应用程序。查看我的 作品集 了解更多信息,博客 了解最新技巧,以及我的其他 包 以启动您的下一个项目。
有一个可能需要指导的项目吗?请发送电子邮件到 hello@sebastiaanluca.com!