我有一个名为profile的模型的插件。此外,我在app / model文件夹中有一个配置文件模型,其中包含一个函数getProfileDetails。我从AppController调用此函数,使用以下代码
function beforeRender(){if ($this->isAuthorized())
{
$this->loadModel('Profile');
$this->set('ownProfile', $this->Profile->getProfileDetails($this->Auth->user('id')));
}
}
当我通过网址访问插件时,我收到以下错误 语法错误或访问冲突: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)
如果我在插件/模型/配置文件中提供相同的功能,一切正常。如何告诉cake在loadmodel中获取App / model / profile模型?
答案 0 :(得分:2)
Cake 2.0及以前的版本不支持重复的模型/控制器名称。这样的设置在1.3及更低版本中工作的事实是开发人员不知道的无意识的副作用。 Cake从插件和实际应用程序加载所有类。因此,应用程序中任何位置的重复类名都必然会搞砸。
可能会在Cake 3.0中添加对重复类名的支持,因为该版本依赖于PHP 5.3,而后者又支持实现创建重复类名所需的名称空间。
我知道的唯一解决方法是重命名插件的控制器,模型和视图,例如,通过在插件名称前加上文件和类名。如果插件使用与应用程序相同的数据库表,则必须使用$useTable
模型属性将重命名的模型指向正确的数据库表。
this bug report中介绍了一些背景知识。