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

Ben*_*rey 2 php laravel lumen

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

例如,这是isDownForMaintenanceLumenApplication类中的定义:

public function isDownForMaintenance() : bool
{
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我想用我自己的实现来覆盖它,如下所示:

public function isDownForMaintenance() : bool
{
    // Do something…
}
Run Code Online (Sandbox Code Playgroud)

我试过了…

应用服务提供者.php

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

应用程序.php

class Application extends BaseApplication
{
    public function isDownForMaintenance() : bool
    {
        // Do Something…
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*rey 5

在整个网络探索后,我已成功后,概述了一篇文章绊倒正是我一直在寻找。为简单起见,我将概述如何扩展 Laravel 和 Lumen 的核心Application类,但对于那些希望看到更深入描述的人,请参阅此处:

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

这令人惊讶,非常容易......首先,我们找到Application创建的地方即/bootstrap/app.php

然后,我们找到以下行:

Laravel

$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);
Run Code Online (Sandbox Code Playgroud)

流明

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);
Run Code Online (Sandbox Code Playgroud)

然后非常简单地更改为:

$app = new Custom\Application(
    realpath(__DIR__.'/../')
);
Run Code Online (Sandbox Code Playgroud)

例如,您可以使用“自定义\应用程序”做任何您喜欢的事情;

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';
    }
}
Run Code Online (Sandbox Code Playgroud)