Laravel/Lumen 核心应用程序中的覆盖方法

Override Method in Laravel/Lumen Core Application

是否可以覆盖 Laravel/Lumen Application class 中定义的函数?

例如Lumen中isDownForMaintenance的定义Application class:

public function isDownForMaintenance() : bool
{
    return false;
}

我想像这样用我自己的实现覆盖它:

public function isDownForMaintenance() : bool
{
    // Do something…
}

我试过了……

AppServiceProvider.php

$this->app->extend(‘app’, function () {
    return new Application; // Extension of Laravel/Lumen/Application
});

Application.php

class Application extends BaseApplication
{
    public function isDownForMaintenance() : bool
    {
        // Do Something…
    }
}

在浏览整个网络后,我偶然发现了一篇文章,其中 完全 概述了我正在寻找的内容。为了简单起见,我将概述如何扩展 Laravel 和 Lumen 的核心 Application class,但对于那些希望看到更深入描述的人,请参阅这里:

https://mattstauffer.com/blog/extending-laravels-application/

这出人意料,非常简单...首先,我们找到创建 Application 的位置,即 /bootstrap/app.php

然后,我们找到下面一行:

Laravel

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);

流明

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

然后很简单地改成这样:

$app = new Custom\Application(
    realpath(__DIR__.'/../')
);

然后您可以使用 `Custom\Application' 做任何您喜欢的事情,例如;

class Application extends BaseApplication
{
    // Override the maintenance mode detection...
    public function isDownForMaintenance() : bool
    {
        // Do Something…
    }

    // Override the default storage path...
    public function storagePath()
    {
        return $this->basePath.'/custom/storage';
    }
}