CakePHP 3.5和Crud插件出错(CrudComponent.php上的Uncaught Exception)

时间:2018-05-05 03:57:49

标签: php cakephp crud

我在使用Api,ApiPagination和ApiQueryLog监听器干净安装friendsofcake/crud时实现插件CakePHP 3.5版本5.4.1时遇到问题。我在Ubuntu上使用PHP 7.0。 我已按照文档中的instalation stepsthis tutorial进行了操作,但我遇到了一个奇怪的问题。
对CRUD API崩溃的每个请求和堆栈跟踪都指向CrudComponent上的第540行 我修改了插件代码并找到了引发异常的位置以及如何修复它,但我不想更改库的代码。导致异常是因为当使用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:如果我在写作时犯了任何错误,我很抱歉,英语不是我的母语 Image capture of the stack trace

1 个答案:

答案 0 :(得分:0)

对我来说,看起来你的一位听众正在将$event->result更改为Response个对象。

或者其中一个事件侦听器正在重新调整响应对象,而该响应对象又会更改$event->response

禁用/删除所有侦听器并逐个添加它们以查看导致问题的原因。

堆栈跟踪表示拦截 crud.beforeRender 事件