我有一个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');
所以我问:你将如何实现它?
答案 0 :(得分:0)
我不确定,但你可以尝试一下。将绑定参数存储在文件(yml或json)中。绑定将基于文件中的参数(变量)发生。如果它包含2,那么绑定其他绑定文件中存在的那个。
例如你有一个json文件
{
"context1": {
"db1": [
"sfGuardUser"
]
},
"context2": {
"db2": [
"sfGuardUser",
"sfGuardGroup"
]
}
}
在app.yml
all:
bind: context1
您阅读app.yml并绑定到json文件中的上下文参数。 假设app.yml中的绑定值是context1。然后,您将在preExecute函数中将sfGuardUser与db1绑定。
您可以使用
动态更改app.yml值sfConfig::set('app_bind',"context2");