Ошибка с CakePHP 3.5 и плагином Crud (Uncaught Exception на CrudComponent.php) - PullRequest
0 голосов
/ 05 мая 2018

У меня проблема с реализацией плагина friendsofcake / crud , версия 5.4.1, при чистой установке CakePHP 3.5 с прослушивателями Api, ApiPagination и ApiQueryLog. Я использую PHP 7.0 на Ubuntu. Я выполнил этапы установки из документации, а также это руководство , но столкнулся со странной проблемой.
Каждый запрос на сбой CRUD API и трассировка стека указывают на строку 540 в CrudComponent.
Я пересмотрел код плагина и нашел, где генерируется исключение и как его исправить, но я не хочу менять код библиотеки. Исключение вызвано тем, что при использовании слушателя Api событие Crud.beforeRender возвращает объект Response, если я закомментирую строку «throw $ Exception», все будет работать, как и ожидалось.

Это код библиотеки (Controller / Component / CrudComponent.php):

public function trigger($eventName, Subject $data = null)
{
    $eventName = $this->_config['eventPrefix'] . '.' . $eventName;

    $Subject = $data ?: $this->getSubject();
    $Subject->addEvent($eventName);

    if (!empty($this->_config['eventLogging'])) {
        $this->logEvent($eventName, $data);
    }

    $Event = new Event($eventName, $Subject);
    $this->_eventManager->dispatch($Event);

    if ($Event->result instanceof Response) {
        $Exception = new Exception();
        $Exception->response = $Event->result;
        throw $Exception;
    }

    return $Event;
}

Если кто-нибудь и поймет, что вызывает такое странное поведение, я буду признателен за любую помощь. PS: Извините, если я сделал какие-либо ошибки при написании, английский не мой родной язык.
захват изображения трассировки стека

1 Ответ

0 голосов
/ 06 мая 2018

Ну, мне кажется, один из ваших слушателей меняет $event->result на Response объект.

Или один из прослушивателей событий перенастраивает объект ответа, который, в свою очередь, меняет $event->response.

Отключите / удалите всех слушателей и добавьте их одного за другим, чтобы определить причину проблемы.

Трассировка стека указывает на то, что crud.beforeRender перехватывается

...