sebastiaanluca/laravel-router

此包已废弃,不再维护。未建议替代包。

处理Laravel路由的有组织方法。

10.0.0 2020-10-19 15:35 UTC

README

Latest stable release Software license Build status Total downloads Total stars

Read my blog View my other packages and projects Follow @sebastiaanluca on Twitter Share this package on Twitter

处理Laravel中路由的有组织方法。

此包提供了一个易于使用的系统,可以将路由逻辑根据功能分离到routers中,同时提供额外的功能。它是那些庞大且缺乏结构的web.phpapi.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

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全

如果您发现任何与安全相关的问题,请通过电子邮件 hello@sebastiaanluca.com 而不是使用问题跟踪器来联系。

致谢

关于

我叫Sebastiaan,是一名自由职业的Laravel开发者,专注于构建定制的Laravel应用程序。查看我的 作品集 了解更多信息,博客 了解最新技巧,以及我的其他 以启动您的下一个项目。

有一个可能需要指导的项目吗?请发送电子邮件到 hello@sebastiaanluca.com