gam6itko / doctrine-multibase-bundle
允许动态地在多个实例之间切换基础Doctrine连接
v0.2.1
2020-05-16 21:10 UTC
Requires
- php: >=7.1
- doctrine/dbal: ^2.6
- doctrine/orm: ^2.6
- symfony/event-dispatcher-contracts: ^1.1 || ^2.0
Requires (Dev)
- doctrine/doctrine-bundle: ^1.9
- symfony/symfony: ^4.4
This package is auto-updated.
Last update: 2024-09-17 06:49:08 UTC
README
允许动态地在多个实例之间切换基础Doctrine连接。
让我们想象你有一个自己的CRM,它拥有许多账户。你希望每个账户的数据都存储在自己的数据库中。在这种情况下,你需要有一个可以动态切换到所需账户的连接。这个库在这里可能会有用。
安装
composer require gam6itko/doctrine-multibase-bundle
配置
首先,你需要配置可切换的Doctrine连接。
## doctrine.yaml doctrine: dbal: default_connection: default connections: default: # your system database connection which contains accounts account: # switchable connection driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name_account_prefix%" user: "%database_user%" password: "%database_password%" orm: entity_managers: default: # something here account: connection: account # dynamic connection mappings: AppAccountDataBundle: ~
注册连接切换器
# services.yaml Gam6itko\MultibaseBundle\Doctrine\ConnectionSwitcher: public: true arguments: ['@doctrine.dbal.account_connection', '%database_name_account_prefix%'] calls: - [setEventDispatcher, ['@event_dispatcher']]
创建数据库
php bin/console multibase:database:create account database_account 1917 php bin/console multibase:schema:create account database_account 1917
最后,当你需要时,将模拟账户连接切换到真实连接。例如,在用户登录时进行操作。
# services.yaml App\EventListener\AccountConnectionListener: calls: - [setConnectionSwitcher, ['@Gam6itko\MultibaseBundle\Doctrine\ConnectionSwitcher']] tags: - {name: kernel.event_listener, event: kernel.request}
# App\EventListener\AccountConnectionListener class AccountConnectionListener { use ConnectionSwitcherAwareTrait; public function onKernelRequest(GetResponseEvent $event) { $user = $this->getUser(); $this->connectionSwitcher->switchTo($user->getAccount()->getId()); } }