是否可以覆盖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…
}
}
答案 0 :(得分:4)
在整个网络浏览之后,我偶然发现了一篇文章,其中概述了完全我正在寻找的内容。为简单起见,我将概述如何扩展Laravel和& Lumen的核心Application
课程,但对于那些希望看到更深入描述的人,请看这里:
https://mattstauffer.com/blog/extending-laravels-application/
令人惊讶的是,这非常容易......首先,我们找到了创建Application
的地方,即/bootstrap/app.php
然后,我们找到以下行:
$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';
}
}