是否有任何开箱即用的解决方案,而无需更改核心以将自定义路由器添加到 Laravel 或 lumen。我已经知道 lumen 正在使用与 laravel 不同的路由器,所以我想知道是否有可能在核心中构建来更改路由器?
我今天也有同样的问题。经过一些研究,我找到了一个对核心类影响最小的解决方案。
注:以下描述基于Lumen 6.2。
在你开始之前; 考虑一个合适的解决方案,使用中间件。
由于这个框架的性质,如果Router
不扩展核心类和修改引导程序,就无法使用自定义。
按照以下步骤进行自定义Router
:
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
要使用新的is。
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);
}
}
Application
的实例Application
在我们的bootstrap/app.php
.
找到看起来像的代码块
$app = new Laravel\Lumen\Application(
dirname(__DIR__)
);
并将其更改为
$app = new App\Application(
dirname(__DIR__)
);
的$router
财产Application
是公共财产。您可以简单地将自定义实例分配Router
给它。
Application
在你的bootstrap/app.php
地方实例化之后
$app->router = new \App\Routing\Router;
完毕。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句