使用Symfony 4或5,我想建立一个单独的应用程序,通过实体管理器透明地使用默认的EM与doctrine对话,但根据当地语言改变连接。
我们的想法是如何在运行时检查locale,并决定在整个请求中使用正确的db连接。也就是 $doctrine->getEntityManager()
应该返回一个具有正确连接的管理器,既可以在仓库上使用,也可以通过防火墙处理auth和任何其他连接到DB的服务。
BONUS应该可以在运行命令时指定使用什么连接。
详细说明。- Symfony 4或更高版本。- PHP7>。- 每个国家都使用相同的模式。- 对于http请求,locale在url中。- 所有数据库的url都在env文件中。
我自己的尝试。
如果尝试延长 Doctrine\DBAL\Connection
使用doctrines config制作一个包装器,但没有找到改变所有连接设置的方法。(将URL改成主、从DB)对请求和控制台都有影响。
任何帮助都是非常感激的。
它不是你的问题的直接解决方案,但可能是有帮助的。
当我想用相同的实体和模型有不同的数据库连接时,我可以使用多个连接,但这比什么都紧张。我不能包括自动测试和调试是可怕的。
去年我的解决方案是使用相同的代码,但配置不同。
所以现在我们已经把处理数据库连接的逻辑分开了,我们不能重用实体和模型。
在这之后,我开始使用docker。所以我用php:7.4-fpm创建了一个镜像。现在我可以用git仓库中提供的默认配置来启动这个容器。
如果我想改变数据库连接,我只需要把一个外部的.env.local挂载到镜像中,然后把它作为一个容器启动。
现在我有一个容器,一个是默认配置,一个是特定的数据库连接,两个都是并行运行,可以用它们不同的数据库连接自动测试。
希望对你有所帮助。