我正在试图找出ACL,所以我正在尝试完成本书中的教程(顺便说一下,Cake 1.3)。
我已经创建了数据库表(aros,acos,aros_acos)。但是,当我尝试在我的AppController中包含Acl组件时,当我尝试访问任何页面时出现致命错误:
致命错误(256):ConnectionManager :: getDataSource - 不存在的数据源[CORE / cake / libs / model / connection_manager.php,第102行]
在我的AppController中:
public $components = array('Auth','Session','RequestHandler','Acl');
从components数组中删除Acl会使一切恢复正常。
当我在AppController中注释掉一些代码时,错误消失了。这是代码 - 注释掉的行是罪魁祸首。 AppModel :: slugList()是一个自定义函数,只执行基于slug的查询查询。它工作正常,至少在包括Acl之前。
if ($this->modelClass != 'Country'){
$this->loadModel('Country');
}
if ($this->modelClass != 'Category'){
$this->loadModel('Category');
}
$this->Session->write('Country',1);
$this->Session->write('City',1);
$_countryId = $this->Session->read('Country');
//$_countries = $this->Country->slugList();
$_cityId = $this->Session->read('City');
//$_cities = $this->Country->City->slugList();
修改 - 此外,还会显示三条通知:
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 813]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 838]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 841]
答案 0 :(得分:1)
此错误是由模型和/或数据库表结构之间的不一致引起的。调试它的关键是通知集。在dbo_source.php :: line 813上插入var_dump语句将为您提供关于中断所在位置的提示。例如:
foreach ($model->{$type} as $assoc => $assocData) {
$linkModel =& $model->{$assoc};
$external = isset($assocData['external']);
var_dump($model->name, $assoc);
if ($model->useDbConfig == $linkModel->useDbConfig) {
if (true === $this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null)) {
$linkedModels[$type . '/' . $assoc] = true;
}
}
}
就我而言,我为我忘记创建的数据库表定义了一个模型。
答案 1 :(得分:0)
好吧,我有一个名为“权限”的模型,我作为Acl请求者的模型“角色”与之相关。这是问题所在。我想Acl组件在某处使用了这个名字的类?