【问题标题】:loadmodel taking plugin modelloadmodel 采用插件模型
【发布时间】:2012-01-24 10:08:15
【问题描述】:

我有一个名为 profile 的插件。我还在 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 服务器版本相对应的手册,以在第 1 行的“getProfileDetails”附近使用正确的语法 /lib/Cake/Model/Datasource/DboSource.php(436): PDOStatement->execute(Array) /lib/Cake/Model/Datasource/DboSource.php(403): DboSource->_execute('getProfileDetai...', Array)

如果我在插件/模型/配置文件中提供相同的功能,一切正常。 loadmodel 中如何告诉 cake 取 App/model/profile 模型?

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

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

    Cake 3.0 可能会添加对重复类名的支持,因为该版本将依赖 PHP 5.3,而 PHP 5.3 反过来支持实现创建重复类名能力所需的命名空间。

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

    this bug report 涵盖了一些背景。

    【讨论】:

    • 等一下,我刚刚意识到我之前回答过你的一个问题,答案大致相同 (stackoverflow.com/questions/8879597/…)。恐怕在这种情况下也是如此:重复的类名会导致 Cake 出现问题。
    猜你喜欢
    • 2020-01-23
    • 2021-05-06
    • 2011-07-30
    • 2023-01-25
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多