2012-01-24 2 views
0

프로필이라는 모델의 플러그인이 있습니다. 또한 함수/getProfileDetails가 포함 된 app/model 폴더의 프로필 모델이 있습니다. 내가 URL을 통해 플러그인에 액세스 Whenver 나는 다음과 같은 코드loadmodel 복용 플러그인 모델

function beforeRender(){if ($this->isAuthorized()) 
{ 
    $this->loadModel('Profile'); 
    $this->set('ownProfile', $this->Profile->getProfileDetails($this->Auth->user('id'))); 
} 

}

를 사용하여 AppController가에서 전화하고이 기능은, 필자는 다음과 같은 오류를 구문 오류 또는 액세스 위반을 얻는 방법 : 당신은 1064이 SQL 구문의 오류. 올바른 구문을 찾으려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 1 행의 'getProfileDetails'근처에서 사용하십시오. /lib/Cake/Model/Datasource/DboSource.php(436) : PDOStatement-> execute (Array) /lib /Cake/Model/Datasource/DboSource.php(403) : DboSource -> _ execute ('getProfileDetai ...', Array)

Plugin/model/profile에서 동일한 함수를 사용하면 모든 것이 작동합니다. loadmodel에서 app/model/profile 모델을 가져 오는 케이크를 말하는 법?

답변

2

Cake 2.0 및 이전 버전은 중복 모델/컨트롤러 이름을 지원하지 않습니다. 이러한 설정이 1.3 이하에서 작동한다는 사실은 의도하지 않은 부작용이 개발자에게 알려지지 않았 음을 나타냅니다. Cake는 플러그인과 실제 응용 프로그램에서 모든 클래스를로드합니다. 그래서 어디서나 중복되는 클래스 명은 어플리케이션을 엉망으로 만든다.

이 버전은 중복 클래스 이름을 생성하는 데 필요한 네임 스페이스를 지원하는 PHP 5.3에 의존하기 때문에 중복 클래스 이름 지원이 Cake 3.0에 추가 될 것입니다.

필자가 알고있는 유일한 해결책은 플러그인 이름을 파일과 클래스 이름 앞에 붙여서 플러그인 컨트롤러, 모델 및보기의 이름을 바꾸는 것입니다. 플러그인이 응용 프로그램과 동일한 데이터베이스 테이블을 사용하는 경우 $useTable 모델 속성을 사용하여 이름이 바뀐 모델을 올바른 데이터베이스 테이블로 지정해야합니다.

일부 배경은 this bug report에 있습니다.

+0

잠깐, 나는 방금 전에 거의 같은 대답으로 당신의 질문에 답했다는 것을 깨달았습니다. (http://stackoverflow.com/questions/8879597/cakephp-plugin-model-controller-cache-issue-with -main-model-controller)를 사용하십시오. 나는이 시나리오에서 똑같은 것을 적용 할까 두려워한다 : 중복 클래스 이름은 Cake에서 문제를 일으킨다. – mensch

+0

예. 답장을 보내 주셔서 감사합니다. – binoy

관련 문제