2012-01-24 3 views
0

У меня есть плагин с моделью, называемой профилем. Также у меня есть модель профиля в папке app/model, которая содержит функцию getProfileDetails. Эта функция Я звоню из AppController, используя следующий кодloadmodel принятие плагин модель

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

}

Whenver Я доступ плагин через URL, Im получение получать следующую ошибку Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'getProfileDetails' в строке 1 /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?

ответ

2

Cake 2.0 и предыдущие версии не поддерживают дублирующие имена моделей/контроллеров. Тот факт, что такая установка работает в 1.3 и ниже, был непреднамеренным побочным эффектом, неизвестным разработчикам. Торт загружает все классы, из плагинов и фактического приложения. Таким образом, дублируемое имя класса в любом месте приложения обязательно должно испортить вещи.

Поддержка дубликатов классных имен, скорее всего, будет добавлена ​​в Cake 3.0, так как эта версия будет полагаться на PHP 5.3, которая, в свою очередь, поддерживает пространства имен, необходимые для реализации возможности создания повторяющихся классов.

Единственным обходным решением, которое я знаю, является переименование контроллеров, моделей и представлений вашего плагина, например, путем префикса имени плагина к файлам и именам классов. Если плагин использует те же таблицы базы данных, что и приложение, вам придется использовать атрибут модели $useTable, чтобы переименовать модели в нужные таблицы базы данных.

Некоторые фон покрыт this bug report.

+0

Подождите, я только что понял, что ответил на ваш вопрос раньше примерно с таким же ответом (http://stackoverflow.com/questions/8879597/cakephp-plugin-model-controller-cache-issue-with -main-модель-контроллер). Я боюсь, что в этом случае применяется то же самое: дублировать классные имена вызывает проблемы в Cake. – mensch

+0

есть. Спасибо за ответ. – binoy