ميكل ديااس/لارافيل-خطوط-مفردة

为您的 Laravel 应用程序提供简化的路由管理。

v3.0.0 2023-11-01 14:57 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

单文件路由允许您将有关路由的所有内容都放在一个文件中。通过查看路由方法、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)。请参阅许可证文件以获取更多信息。