我已将Cake的Auth组件集成到我的应用程序中。它似乎工作正常但我经常在登录时看到这样的错误:
错误:调用未定义的方法Security :: getDataSource()
文件:C:\ xampp \ htdocs \ ips-mvc \ lib \ Cake \ Model \ Datasource \ DboSource.php
行:1063
知道这意味着什么吗?
为了记录,我的应用程序中有一个名为Security
的模型。我不知道Cake中有任何保留的模型名称,但我的Security
mdoel是否有可能与Cake组件冲突?当Security
模型没有被使用时,仍然会出现此错误,尽管它的外观非常零星 - 有时刷新页面会使一切正常。
有什么想法吗?
答案 0 :(得分:1)
错误是由将组件实例传递给期望模型实例的方法引起的,并且可以通过不创建与正在使用的组件同名的模型类来轻松避免。
问题与重复的类名无关,因为Models没有类名后缀,但组件没有。
但是,例如,在控制器中使用以下语法:
$this->{$alias}
用于访问两个组件(类名{$alias}Component
)或模型(类名$alias
)。
因此,使用与组件同名的模型会使一个或另一个不可访问。
然而问题不止于此。使用别名作为键存储对象in the class registry:
例如,在Model中:
ClassRegistry::addObject($this->alias, $this);
如果使用相同的别名(安全模型,SecurityComponent
) - 占用密钥“安全性”的对象只是第一个添加到注册表的对象 - 所有后续的“安全性”请求将返回对象
取决于缓存过期以及模型和组件是否在同一请求中使用 - 确定问题中出现的错误的频率以及它们是“随机”还是可重现的。