我正在使用 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 中的供应商类,我是否可能缺少任何其他步骤或注意事项?
任何见解和建议将不胜感激。
驱动程序的此信息来自服务提供商绑定到容器的单例。工厂手动创建数据库驱动程序的实例,而不是使用 IoC 来解析它们。您可以尝试用您的类的“mysql”键覆盖此集合:
$drivers = $this->app('tenancy.db.drivers');
$drivers['mysql'] = YourMariaDBClass::class;
$this->app->singleton('tenancy.db.drivers', $drivers);
您可以将其添加到服务提供商的
boot
方法中。