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

时间:2018-03-31 12:22:32

标签: laravel laravel-5.3 lumen lumen-5.4

是否有任何开箱即用的解决方案,无需更换核心即可将自定义路由器添加到laravel或流明。我已经知道流明使用不同的laravel路由器,所以我想知道是否有任何可能在核心中建立更换路由器?

1 个答案:

答案 0 :(得分:1)

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

  

注意:以下说明基于流明6.2

     

开始之前;考虑使用中间件

由于此框架的性质,无法在不扩展核心类和修改引导程序的情况下使用自定义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()的构造函数即可演示是否要使用新的Router ist。

2。扩展Application

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

<?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的{​​{1}}属性是公共属性。您只需为其分配自定义Application的实例即可。

在您的Router中实例化Application之后,放置一个

bootstrap/app.php

完成。