动态地将组件绑定到连接
我有一个 symfony 网站,可以在两种不同的上下文中浏览。我的意思是上下文,而不是应用程序(我使用 ysfDimensionsPlugin)。在第一个上下文中,我使用绑定到数据库 db1 的 sfGuard 对用户进行身份验证;在第二个上下文中,我使用 sfGuard 对用户进行身份验证,但绑定到数据库 db2。
这两个连接在databases.yml 中定义为标准 sfDoctrineDatabase 对象。在 schema.yml 中,我将 sfGuard 组件绑定到 db1 连接。因此,在我的 sfGuard 基类中,我有以下内容:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
如果我处于第二个上下文中,我尝试做的是将 sfGuard 组件动态绑定到 db2 连接。因此,在全局 preExecute 方法中,我这样做:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db2');
Doctrine_Manager::getInstance()->bindComponent('sfGuardGroup', 'db2');
进行绑定,但在进行查询时它会立即被覆盖: sfAutoload 加载 sfGuard 类,包括基类,调用此:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
所以我问: 你会怎么做实施它来解决这个问题?
I have a symfony web site that can be browsed in two different contexts. I mean contexts, not applications (I use ysfDimensionsPlugin). In the first context, I authenticate the users using sfGuard bound to a database db1; in the second context, I authenticate the users using sfGuard but bound to a database db2.
Those 2 connections are defined in databases.yml as standard sfDoctrineDatabase objects. In schema.yml, I bind the sfGuard components to the db1 connection. So in my sfGuard base classes, I have this:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
What I try to do is to dynamically bind the sfGuard components to the db2 connection if I am in the second context. So in a global preExecute method, I do this:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db2');
Doctrine_Manager::getInstance()->bindComponent('sfGuardGroup', 'db2');
The binding is made, but it is immediately overwritten when a query is made: sfAutoload loads the sfGuard classes, including the base classes, calling this:
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
So I'm asking: how would you implement that to work it out?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不确定,但你可以试试这个。将绑定参数存储在文件(yml 或 json)中。绑定将根据文件中的参数(变量)进行。如果它包含 2,则绑定两者,否则绑定文件中存在的一个。
例如,您有一个 json 文件
,在 app.yml 中,
您读取 app.yml 并绑定到 json 文件中的上下文参数。
假设 app.yml 中的绑定值为 context1。然后,您将在 preExecute 函数中将 sfGuardUser 与 db1 绑定。
您可以使用动态更改 app.yml 值
I'm not sure but u can try this. Store the binding arguments in a file(yml or json). The binding will happen based on the arguments(variables) in the file. If it contains 2 then bind both else bind the one present in the file.
for eg you have a json file
And in app.yml
You read the app.yml and bind to the context arguments in the json file.
Suppose bind value in app.yml is context1. Then you will bind sfGuardUser with db1 in your preExecute function.
You can change the app.yml values dynamically by using