CakePHP w Плагин CakeDC для пользователей с внешней базой данных: вызов функции-члена user () в логическом режиме

Мое приложение разработано в CakePHP 3.x и имеет 2 базы данных.

Я использую плагин CakedDC Users, и он отлично работает со всеми моделями из базы данных по умолчанию. Вот что у меня в AppController:

public function initialize()
{
parent::initialize();

$this->loadComponent('Flash');
$this->loadComponent('RequestHandler', [
'viewClassMap' => [
'docx' => 'Word',
],
]);
$this->loadComponent('Paginator');
$this->loadComponent('CakeDC/Users.UsersAuth');
}

public function beforeFilter(Event $event)
{
$userId = $this->Auth->user('id');
EventManager::instance()->on(new RequestMetadata($this->request, $userId));
$isLogged = $this->Auth->user();
$this->set(compact('isLogged'));

if ($clientId = $this->request->query('client_id')) {
$client = $this->loadModel('Clients')->find()
->where(['id' => $clientId])
->select(['id', 'slug', 'last_name', 'first_name'])
->first();

$this->set(compact('client'));
}
}

public function beforeRender(Event $event)
{
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', 'application/xml'])
) {
$this->set('_serialize', true);
}
}

В контроллере из второй базы данных у меня есть эти функции:

public function initialize()
{

}

public function index()
{
$connection = ConnectionManager::get('db3'); // 'db2' where my second database is configured
$machines = $connection->execute('SELECT * FROM MACHINE');

$this->set(compact('machines'));
$this->set('_serialize', ['machines']);
}

После аутентификации все модели работают нормально, кроме этого внешнего вида. Я продолжаю получать эту ошибку в машинах index.ctp:

Вот ошибки, которые я получаю:

App \ Controller \ AppController-> beforeFilter
CORE \ src \ Event \ EventManager.php, строка 422
⟩ Cake \ Event \ EventManager -> _ callListener
CORE \ src \ Event \ EventManager.php, строка 391
⟩ Cake \ Event \ EventManager-> рассылка
CORE \ src \ Event \ EventDispatcherTrait.php, строка 78
⟩ Cake \ Controller \ Controller-> dispatchEvent
CORE \ src \ Controller \ Controller.php, строка 497
⟩ Cake \ Controller \ Controller-> startupProcess
CORE \ src \ Http \ ActionDispatcher.php, строка 116
⟩ Cake \ Http \ ActionDispatcher -> _ вызывать
CORE \ src \ Http \ ActionDispatcher.php, строка 95
⟩ Cake \ Http \ ActionDispatcher-> рассылка
CORE \ src \ Routing \ Dispatcher.php, строка 60
⟩ Торт \ Маршрут \ Диспетчер-> Отправка
ROOT \ webroot \ index.php, строка 36

Ошибка в: ROOT \ src \ Controller \ AppController.php, строка 65
(!) Xdebug: пользователь сработал в C: \ wamp64 \ www \ inventory \ src \ Template \ Error \ error500.ctp в строке 33
Стек вызовов

1 0.0861 5439240 Cake \ Error \ BaseErrorHandler-> wrapAndHandleException () … \ BaseErrorHandler.php: 0
2 0.0888 5445696 Cake \ Error \ BaseErrorHandler-> handleException () … \ BaseErrorHandler.php: 164
3 0.0888 5445696 Cake \ Error \ ErrorHandler -> _ displayException () … \ BaseErrorHandler.php: 180
4 0.0919 5737712 Cake \ Error \ ExceptionRenderer-> render () … \ ErrorHandler.php: 144
5 0.0932 5878816 Cake \ Error \ ExceptionRenderer -> _ outputMessage () … \ ExceptionRenderer.php: 194
6 0.1235 7711592 Cake \ Error \ ExceptionRenderer -> _ outputMessage () … \ ExceptionRenderer.php: 328
7 0.1235 7711592 Cake \ Controller \ Controller-> render () … \ ExceptionRenderer.php: 319
8 0.1255 7791592 Cake \ View \ View-> render () … \ Controller.php: 617
9 0.1260 7792544 Cake \ View \ View -> _ render () … \ View.php: 597
10 0.1261 7793376 Cake \ View \ View -> _valu () … \ View.php: 973
11 0.1263 7822312 include (‘C: \ wamp64 \ www \ inventory \ src \ Template \ Error \ error500.ctp’) … \ View.php: 1014
12 0.1275 7840560 xdebug_print_function_stack () … \ error500.ctp: 33

Что мне делать именно?

Заранее спасибо.

0

Решение

Ваш второй контроллер пуст initialize функция. В результате компонент Auth не загружается (это делается AppController::initialize, но это никогда не называется), поэтому, когда вы пытаетесь использовать $this->Auth в beforeFilterэто не существует Есть ли веская причина, почему ваш второй initialize даже там есть? Ликвидация или вызов parent::initialize() в любом случае это обеспечит загрузку необходимых компонентов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector