<?php
/**
* BeforeActionsSubscriber
*
* @author Bertin van den Ham <b.vandenham@visualmedia.nl>
*/
namespace VisualMedia\LisaBundle\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class BeforeActionsSubscriber
*/
class BeforeActionsSubscriber implements EventSubscriberInterface
{
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return array(
KernelEvents::CONTROLLER => 'controller',
);
}
/**
* Controller
*
* @param FilterControllerEvent $event
*
* @return void
*/
public function controller(ControllerEvent $event): void
{
$this->defaults($event);
$this->convertJsonToArray($event);
}
/**
* Defaults
*
* @param FilterControllerEvent $event
*
* @return void
*/
public function defaults(ControllerEvent $event): void
{
$request = $event->getRequest();
$content = $request->getContent();
// Remove underscore query parameter when disabling cache in jQuery Ajax request.
if ($request->isXmlHttpRequest()) {
$request->query->remove('_');
}
}
/**
* Convert Json To Array
*
* @param FilterControllerEvent $event
*
* @return void
*/
public function convertJsonToArray(ControllerEvent $event): void
{
$request = $event->getRequest();
$content = $request->getContent();
if ($request->getContentType() !== 'json' || !$content) {
return;
}
$data = json_decode($content, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new BadRequestHttpException('invalid json body: ' . json_last_error_msg());
}
$request->request->replace(is_array($data) ? $data : array());
}
}