CakePHP - 包含ACL组件会产生致命错误:ConnectionManager :: getDataSource - 不存在的数据源

时间:2011-03-28 19:07:22

标签: cakephp cakephp-1.3 acl

我正在试图找出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]

2 个答案:

答案 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组件在某处使用了这个名字的类?