使用CakePHP的Auth组件登录时出错

时间:2013-11-05 10:27:10

标签: php cakephp authorization cakephp-2.3

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

  

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

知道这意味着什么吗?

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

$this->{$alias}

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

因此,使用与组件同名的模型会使一个或另一个不可访问。

缓存中毒

然而问题不止于此。使用别名作为键存储对象in the class registry

例如,在Model中:

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

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

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

相关问题