public function onKernelRequest(GetResponseEvent $event)
{
$this->logger->debug('Entity builder listener: catch kernel.request event');
// If this is not a master request, skip handling
if (!$event->isMasterRequest()) {
$this->logger->debug('Entity builder listener: this is not master request, skip');
return;
}
// If content already prepared
if ($event->hasResponse()) {
$this->logger->debug('Entity builder listener: event already has response, skip');
return;
}
// Getting request
$request = $event->getRequest();
// Getting action
$apiServerAction = $event->getRequest()->attributes->get('apiAction');
/* @var $apiServerAction ApiServerAction */
// Something wrong
if (!$apiServerAction) {
$this->logger->error('Request parser listener: request has no apiAction attribute, throwing access denied exception');
throw new AccessDeniedHttpException();
}
// Creating request data entity
try {
$apiEntity = $apiServerAction->getRequestedEntity($request->attributes->get('apiData'));
} catch (\Exception $e) {
$this->logger->notice(sprintf('Request parser listener: unable to convert apiData to entity ("%s"), apiEntity set tu null', $e->getMessage()));
$apiEntity = null;
}
// Setting request attributes
$request->attributes->set('requestData', $apiEntity);
// Cleaning request attributes
$request->attributes->remove('apiData');
}