CakePHP - включение компонента ACL дает фатальную ошибку: ConnectionManager :: getDataSource - Несуществующий источник данных

Я пытаюсь выяснить ACL, и поэтому я пытаюсь проработать руководство в книге (кстати, Cake 1.3).

Я создал таблицы базы данных (aros, acos, aros_acos). Однако как только я пытаюсь включить компонент Acl в свой AppController, я получаю фатальную ошибку при попытке доступа к любой странице:

Неустранимая ошибка (256): ConnectionManager :: getDataSource - Несуществующий источник данных [CORE / cake / libs / model / connection_manager.php, строка 102]

В моем AppController:

    public $components = array('Auth','Session','RequestHandler','Acl');

Удаление Acl из массива компонентов заставляет все снова работать.

Ошибки исчезают, когда я закомментировал какой-то код в своем AppController. Вот код - закомментированные строки виноваты. AppModel :: slugList () - это настраиваемая функция, которая просто выполняет поисковый запрос на основе слага. Работает нормально, по крайней мере, пока не включен 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]

person Will    schedule 28.03.2011    source источник


Ответы (2)


Эта ошибка вызвана несоответствием между вашими моделями и / или структурой таблицы базы данных. Ключ к отладке - это набор уведомлений. Вставка оператора var_dump в dbo_source.php :: line 813 даст вам подсказку относительно того, где находится ваш разрыв. Пример:

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;
        }
    }
}

В моем случае у меня была определена модель для таблицы базы данных, которую я забыл создать.

person Brad Koch    schedule 02.06.2011

Ну, у меня была модель под названием «Разрешение», с которой была связана моя модель «Роль», которая действует как запросчик Acl. Это была проблема. Я предполагаю, что компонент Acl где-то использует класс с таким именем?

person Will    schedule 28.03.2011