loadmodel采用插件模型

时间:2012-01-24 10:08:16

标签: cakephp cakephp-2.0

我有一个名为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模型?

1 个答案:

答案 0 :(得分:2)

Cake 2.0及以前的版本不支持重复的模型/控制器名称。这样的设置在1.3及更低版本中工作的事实是开发人员不知道的无意识的副作用。 Cake从插件和实际应用程序加载所有类。因此,应用程序中任何位置的重复类名都必然会搞砸。

可能会在Cake 3.0中添加对重复类名的支持,因为该版本依赖于PHP 5.3,而后者又支持实现创建重复类名所需的名称空间。

我知道的唯一解决方法是重命名插件的控制器,模型和视图,例如,通过在插件名称前加上文件和类名。如果插件使用与应用程序相同的数据库表,则必须使用$useTable模型属性将重命名的模型指向正确的数据库表。

this bug report中介绍了一些背景知识。