是否可以覆盖 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)
在整个网络探索后,我已成功后,概述了一篇文章绊倒正是我一直在寻找。为简单起见,我将概述如何扩展 Laravel 和 Lumen 的核心Application类,但对于那些希望看到更深入描述的人,请参阅此处:
https://mattstauffer.com/blog/extending-laravels-application/
这令人惊讶,非常容易......首先,我们找到Application创建的地方即/bootstrap/app.php
然后,我们找到以下行:
$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)