1

我已将 Cake 的 Auth 组件集成到我的应用程序中。它似乎工作正常,但我经常在登录时遇到如下错误:

错误:调用未定义的方法 Security::getDataSource()
文件:C:\xampp\htdocs\ips-mvc\lib\Cake\Model\Datasource\DboSource.php
行:1063

知道这意味着什么吗?

作为记录,我的应用程序中有一个名为Security. 我不知道 Cake 中有任何保留的模型名称,但我的Securitymdoel 是否有可能与 Cake 组件冲突?当模型不使用时,这个错误仍然会发生,Security尽管它的外观非常零星 - 有时刷新页面会使一切正常。

有任何想法吗?

4

1 回答 1

1

该错误是由将组件实例传递给期望模型实例的方法引起的,并且可以通过不创建与正在使用的组件同名的模型类来轻松避免。

模型和组件不能具有相同的名称

这个问题与重复的类名无关,因为模型没有类名后缀,但组件有。

但是,例如,在控制器中,以下语法:

$this->{$alias}

用于访问组件(类名{$alias}Component模型(类名$alias)。

因此,拥有与组件同名的模型会使其中一个或另一个无法访问。

缓存中毒

然而问题并不止于此。对象使用别名作为键存储在类注册表中:

例如,在模型中:

 ClassRegistry::addObject($this->alias, $this);

如果使用相同的别名(安全模型,SecurityComponent) - 占用“安全”键的对象只是第一个添加到注册表中的对象 - 所有后续的“安全”请求都将返回该对象。

取决于缓存过期以及模型和组件是否在同一个请求中使用 - 确定诸如问题中的错误之类的错误出现的频率以及它们是否是“随机的”或可重现的。

于 2013-11-05T11:50:20.170 回答