CakePHP - включение компонента ACL приводит к фатальной ошибке: ConnectionManager :: getDataSource - несуществующий источник данных - PullRequest
1 голос
/ 28 марта 2011

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

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

Неустранимая ошибка (256): ConnectionManager :: getDataSource - Несуществующие данныеsource [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]

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Эта ошибка вызвана несоответствием между вашими моделями и / или структурой таблицы базы данных.Ключ к отладке - это набор уведомлений.Вставка оператора 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;
        }
    }
}

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

0 голосов
/ 28 марта 2011

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

...