簡體   English   中英

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

[英]Lumen/Laravel - use custom router

是否有任何開箱即用的解決方案,而無需更改核心以將自定義路由器添加到 Laravel 或 lumen。 我已經知道 lumen 使用的是與 laravel 不同的路由器,所以我想知道是否有可能在核心中構建來更改路由器?

我今天也有同樣的問題。 經過一些研究,我找到了一個對核心類影響最小的解決方案。

注:以下描述基於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()的構造函數來演示,是否要使用新的Router

2. 擴展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);
    }
}

3. 告訴 Lumen 使用我們的Application

Application的實例是在我們的bootstrap/app.php的頂部創建的。

找到看起來像的代碼塊

$app = new Laravel\Lumen\Application(
    dirname(__DIR__)
);

並將其更改為

$app = new App\Application(
    dirname(__DIR__)
);

正確的解決方案

Application$router屬性是公共屬性。 您可以簡單地將自定義Router的實例分配給它。

bootstrap/app.phpApplication實例化之后放置一個

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

完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM