Lumen/Laravel - 使用自定义路由器
Lumen/Laravel - use custom router
是否有任何开箱即用的解决方案,无需更改内核即可将自定义路由器添加到 laravel 或 lumen。我已经知道 lumen 使用的路由器与 laravel 不同,所以我想知道是否有可能在核心中内置更改路由器?
我今天也有同样的问题。经过一些研究,我找到了一个对核心影响最小的解决方案 classes。
Note: The following description is based on Lumen 6.2.
Before you start; think about a proper solution, using a middleware.
由于此框架的性质,如果不扩展核心 classes 和修改 bootstrap.
,则无法使用自定义 Router
按照这些步骤进行自定义 Router
:
Hacky 解决方案
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
内的方法调用中进行初始化,而无需任何绑定或依赖注入。因此,您不能为它覆盖 class 绑定。我们必须修改这个初始化过程。幸运的是,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
属性是public属性。您可以简单地将您的自定义 Router
实例分配给它。
实例化 Application
之后,在您的 bootstrap/app.php
中放置一个
$app->router = new \App\Routing\Router;
完成。
是否有任何开箱即用的解决方案,无需更改内核即可将自定义路由器添加到 laravel 或 lumen。我已经知道 lumen 使用的路由器与 laravel 不同,所以我想知道是否有可能在核心中内置更改路由器?
我今天也有同样的问题。经过一些研究,我找到了一个对核心影响最小的解决方案 classes。
Note: The following description is based on Lumen 6.2.
Before you start; think about a proper solution, using a middleware.
由于此框架的性质,如果不扩展核心 classes 和修改 bootstrap.
,则无法使用自定义Router
按照这些步骤进行自定义 Router
:
Hacky 解决方案
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
内的方法调用中进行初始化,而无需任何绑定或依赖注入。因此,您不能为它覆盖 class 绑定。我们必须修改这个初始化过程。幸运的是,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
属性是public属性。您可以简单地将您的自定义 Router
实例分配给它。
实例化 Application
之后,在您的 bootstrap/app.php
中放置一个
$app->router = new \App\Routing\Router;
完成。