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

Posted

技术标签:

【中文标题】Lumen/Laravel - 使用自定义路由器【英文标题】:Lumen/Laravel - use custom router 【发布时间】:2018-09-10 06:39:56 【问题描述】:

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

【问题讨论】:

你能问得更具体点吗?例如。自定义路由器应该具有什么功能等等。 我没关系,我只需要使用不同的路由器,比如 lumen 使用与 laravel 不同的路由器。我想知道框架中是否有解决方案,或者我需要弄乱核心。 【参考方案1】:

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

注意:以下描述基于Lumen 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() 的构造函数来演示,如果要使用新的Routerist。

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__)
);

适当的解决方案

Application$router 属性是公共属性。您可以简单地将您的自定义 Router 实例分配给它。

Application 实例化之后,在您的bootstrap/app.php 中放置一个

$app->router = new \App\Routing\Router;

完成。

【讨论】:

多亏了这个,我使用了照明路由器将进行一些修改,其中很多功能(在定义路由时)都回来了

以上是关于Lumen/Laravel - 使用自定义路由器的主要内容,如果未能解决你的问题,请参考以下文章

Lumen:将中间件添加到打包定义的路由中

关于Lumen / Laravel .env 文件中的环境变量是如何生效的

Lumen (Laravel) Eloquent php artisan make:model 未定义

Lumen/laravel Event Demo

lumen 中间件详解

如何在 LUMEN 中使用 GATE 立面(Laravel 6.2)