[英]Lumen/Laravel - use custom router
是否有任何開箱即用的解決方案,而無需更改核心以將自定義路由器添加到 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
。
Application
在Application::__construct
內部的方法調用中,常規Router
將在沒有任何綁定或依賴注入的情況下進行初始化。 因此,您不能覆蓋它的類綁定。 我們必須修改這個初始化過程。 幸運的是,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__)
);
Application
的$router
屬性是公共屬性。 您可以簡單地將自定義Router
的實例分配給它。
在bootstrap/app.php
的Application
實例化之后放置一個
$app->router = new \App\Routing\Router;
完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.