loadmodel принимает модель плагина - PullRequest
0 голосов
/ 24 января 2012

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

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

}

Когда я получаю доступ к плагину через URL, я получаю следующую ошибку Синтаксическая ошибка или нарушение доступа: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)

Если я даю ту же функцию в плагине / модели / профиле, все работает.Как сказать торту взять приложение / модель / модель профиля в loadmodel?

1 Ответ

2 голосов
/ 24 января 2012

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

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

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

Некоторый фон покрыт этой ошибкойотчет .

...