Lumen / Laravel-使用自定义路由器

问题描述 投票:1回答:1

是否有任何现成的解决方案,而无需更改核心以将自定义路由器添加到laravel或lumen。我已经知道流明正在使用与laravel不同的路由器,所以我想知道内核中是否有可能改变路由器?

laravel laravel-5.3 lumen lumen-5.4
1个回答
0
投票

我今天有同样的问题。经过一番研究,我找到了对核心课程影响最小的解决方案。

注意:以下描述基于流明6.2

开始之前;考虑使用middleware

的适当解决方案

由于此框架的性质,在不扩展核心类和修改引导程序的情况下,无法使用自定义Router

按照这些步骤执行您的自定义Router

1。创建您的自定义Router

提示:在此示例中,App将是Lumen项目的根名称空间。

<?php

namespace App\Routing;

class Router extends \Laravel\Lumen\Routing\Router
{
    public function __construct($app)
    {
        dd('This is my custom router!');
        parent::__construct($app);
    }
}

没有Interface或类似内容,因此您必须扩展现有的Router。在这种情况下,如果要使用新的dd() ist,则仅包含一个Router的构造函数即可进行演示。

2。扩展Application

常规Router将被初始化,而不会在Application::__construct内部的方法调用中进行任何绑定或插入悔改。因此,您不能覆盖它的类绑定。我们必须修改此初始化过程。幸运的是,流明正在使用一种仅用于路由器初始化的方法。

<?php

namespace App;

use App\Routing\Router;

class Application extends \Laravel\Lumen\Application
{
    public function bootstrapRouter()
    {
        $this->router = new Router($this);
    }
}

3。告诉Lumen使用我们的Application

Application的实例在bootstrap/app.php顶部附近相对创建。

找到类似的代码块

$app = new Laravel\Lumen\Application(
    dirname(__DIR__)
);

并将其更改为

$app = new App\Application(
    dirname(__DIR__)
);

就是这样。您得到了自定义Router

© www.soinside.com 2019 - 2024. All rights reserved.