在 Laravel 5.6 中重写供应商类无法按预期工作

问题描述 投票:0回答:1

我正在使用 Laravel 5.6 并尝试覆盖 hyn/multi-tenant 包中的类,但我的覆盖似乎没有生效。我在下面详细介绍了我的步骤,希望能就我可能遗漏或做得不正确的内容提供一些指导。

我遵循了这个解决方案: 其他解决方案

我试图覆盖的文件:

vendor/hyn/multi-tenant/src/Generators/Webserver/Database/Drivers/MariaDB.php

我的自定义文件:

app/Overrides/CustomMariaDB.php

在我的应用程序服务提供商中,我有以下代码:

public function register()
{
    $this->app->bind(
        'Hyn\Tenancy\Generators\Webserver\Database\Drivers\MariaDB',
        CustomMariaDB::class
    );
}

在我的composer.json中,在自动加载部分下,我包含了这些:

"exclude-from-classmap": [
    "vendor/hyn/multi-tenant/src/Generators/Webserver/Database/Drivers/MariaDB.php"
],
"files": [
    "app/helpers.php",
    "app/Overrides/CustomMariaDB.php"
],

进行这些更改后,我还运行了 Composer dump-autoload 并清除缓存。 然而,我的 customMariaDb 类似乎并没有覆盖包中的主 mariaDb 类。我已经检查了命名空间和类减速,确保我的自定义类扩展了原始类。

为了成功覆盖 Laravel 5.6 中的供应商类,我是否可能缺少任何其他步骤或注意事项?

任何见解和建议将不胜感激。

php sql laravel oop multi-tenant
1个回答
0
投票

驱动程序的此信息来自服务提供商绑定到容器的单例。工厂手动创建数据库驱动程序的实例,而不是使用 IoC 来解析它们。您可以尝试用您的类的“mysql”键覆盖此集合:

$drivers = $this->app('tenancy.db.drivers');
$drivers['mysql'] = YourMariaDBClass::class;
$this->app->singleton('tenancy.db.drivers', $drivers);

您可以将其添加到服务提供商的

boot
方法中。

© www.soinside.com 2019 - 2024. All rights reserved.