두 가지 다른 상황에서 탐색 할 수있는 심포니 웹 사이트가 있습니다. 응용 프로그램이 아니라 컨텍스트를 의미합니다 (나는 ysfDimensionsPlugin을 사용함). 첫 번째 컨텍스트에서는 데이터베이스 db1에 바인딩 된 sfGuard를 사용하여 사용자를 인증합니다. 두 번째 컨텍스트에서는 sfGuard를 사용하여 사용자를 인증하지만 데이터베이스 db2에 바인딩됩니다.구성 요소를 연결에 동적으로 바인딩하기
이 두 연결은 databases.yml에서 표준 sfDoctrineDatabase 객체로 정의됩니다. schema.yml에서 sfGuard 구성 요소를 db1 연결에 바인딩합니다. 그래서 내 sfGuard 기본 클래스에서, 나는이 있습니다
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
내가 뭘하려고하는 것은 내가 두 번째 맥락에서 생각하면 동적으로 DB2 연결에 sfGuard 구성 요소를 결합하는 것입니다. 그래서 글로벌 preExecute 방법으로,이 수행
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db2');
Doctrine_Manager::getInstance()->bindComponent('sfGuardGroup', 'db2');
만들를 바인딩하지만 쿼리가 만들어 질 때 즉시 덮어 씁니다 :이 호출, sfAutoload는 기본 클래스를 포함하여 sfGuard 클래스를로드합니다
Doctrine_Manager::getInstance()->bindComponent('sfGuardUser', 'db1');
그래서 저는 묻습니다. 어떻게 해결할 수 있습니까?
를 사용하여 app.yml 값을 변경할 수 있습니다하지만 난 당신이 무슨 뜻인지 이해가 안 돼요. 당신은 더 명백 할 수 있습니까? – Gregoire
@Gregoire 늦게 답변드립니다. 답변을 업데이트했습니다. – Arasu
내가 말했듯이 문제는 내 preExecute에서 "bindComponent()"호출이 오토로더에 의해 덮어 쓰여진다는 것입니다. – Gregoire