公共品/常规

Laravel 的基于类的路由

dev-master 2022-08-19 10:08 UTC

This package is auto-updated.

Last update: 2024-09-19 14:31:50 UTC


README

这是 Laravel 基于类的路由的一个非常基础的解决方案。它非常简单,可能需要大量的工作。我只为自己编写了这个,并不是真正打算让更广泛的世界使用。

我不打算为这个包提供很多支持,并且可能只在我需要的时候更新它。甚至我不确定我会继续使用它。这更像是一个实验。

但是如果你真的想使用它,那么尽可以安装它,使用 Composer

composer require thepublicgood/routine

安装后,使用以下命令发布配置文件

php ./artisan vendor:publish --provider="TPG\Routine\RoutineServiceProvider"

这将把一个 routine.php 文件放置在你的配置目录中。现在创建一个新的空类,并扩展 TPG\Routine\RouteRegistrar 类。创建新的方法,这些方法的名称以前缀 map 开头,以 Routes 结尾。Routine 将调用每个方法并映射定义的路线。

每个 map 方法必须接受一个 Illuminate\Routing\Router 的实例

use App\Http\Controllers\SessionController;
use Illuminuate\Routing\Router;
use TPG\Routine\RouteRegistrar;

class AuthRoutes extends RouteRegistrar
{
    protected function mapWebRoutes(Router $router): void
    {
        $router->middleware(['guest'])->group(function (Router $router) {
            
            $router->get('/login', [SessionController::class, 'create'])->name('login');
            $router->post('/login', [SessionController::class, 'store']);
        
        });
        
        $router->middleware(['auth'])->post('/logout', [SessionController:class, 'destroy'])->name('logout');
    }
}

默认情况下,Routine 将根据方法名称设置默认中间件。你可以在 routine.php 配置文件中找到这些默认值。例如,方法 mapWebRoutes 将自动使用设置为 web 默认的中间件。方法 mapApiRoutes 将自动使用设置为 api 默认的中间件。这意味着你可以创建一个名为 ajax 的默认值,例如,方法 mapAjaxRoutes 将自动设置这些中间件。

中间件合约

此外,为整个路由文件应用中间件可能很有用。例如,如果你需要指定一组路由需要身份验证。你可以通过实现 TPG\Routing\Contracts\RequiresAuthentication 接口来完成此操作

use Illuminuate\Routing\Router;
use TPG\Routine\Contracts\RequiresAuthentication;
use TPG\Routine\RouteRegistrar;

class DashboardRoutes extends RouteRegistrar implements RequiresAuthentication
{
    // ...
}

Routine 默认包含 RequiresAuthenticationRequiresSanctumAuthenticationSignedRoute 合约。如果你添加了自己的,请确保将它们添加到 routine.php 配置文件中。