我在使用Api,ApiPagination和ApiQueryLog监听器干净安装friendsofcake/crud时实现插件CakePHP 3.5版本5.4.1时遇到问题。我在Ubuntu上使用PHP 7.0。
我已按照文档中的instalation steps和this 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
答案 0 :(得分:0)
对我来说,看起来你的一位听众正在将$event->result
更改为Response
个对象。
或者其中一个事件侦听器正在重新调整响应对象,而该响应对象又会更改$event->response
。
禁用/删除所有侦听器并逐个添加它们以查看导致问题的原因。
堆栈跟踪表示拦截 crud.beforeRender 事件