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

时间:2017-10-17 10:28:47

标签: php laravel lumen

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

例如,这是流明isDownForMaintenance类中Application的定义:

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…
    }
}

1 个答案:

答案 0 :(得分:4)

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

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';
    }
}