lib/Core/Subscriber/KernelSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. /******************************************************************************
  3.  * KernelSubscriber.php [IMPORT]                                              *
  4.  * -------------------------------------------------------------------------- *
  5.  * Diese Datei wurde nicht für dieses Projekt entwickelt, sondern lediglich   *
  6.  * importiert und in das Projekt integriert.                                  *
  7.  *                                                                            *
  8.  * Es steht unter einer proprietären Lizenz, eine Weitergabe oder Verwendung  *
  9.  * in anderen Projekten ist ohne ausdrückliche Zustimmungen von               *
  10.  * Michael Hack Software e.K. nicht gestattet. Die Verwendung dieses          *
  11.  * Quellcodes ist ausschließlich auf dieses Projekt beschränkt.               *
  12.  * -------------------------------------------------------------------------- *
  13.  * Copyright (c) 2023 | Michael Hack Software e.K. | www.mh-s.de              *
  14.  ******************************************************************************/
  15. namespace Core\Subscriber;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  18. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  19. use Symfony\Component\HttpKernel\Event\RequestEvent;
  20. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  21. use Symfony\Component\HttpKernel\Exception\HttpException;
  22. use Symfony\Component\HttpKernel\KernelEvents;
  23. use Symfony\Component\Mailer\Mailer;
  24. use Symfony\Component\Mailer\Transport;
  25. use Symfony\Component\Mime\Email;
  26. class KernelSubscriber implements EventSubscriberInterface {
  27.     public static function getSubscribedEvents() : array {
  28.         return [
  29.             KernelEvents::CONTROLLER => 'onControllerEvent',
  30.             KernelEvents::EXCEPTION  => 'onKernelException',
  31.             KernelEvents::REQUEST    => 'onRequest',
  32.         ];
  33.     }
  34.     /**
  35.      * JSON Anfrage verarbeiten
  36.      * @param ControllerEvent $event
  37.      */
  38.     public function onControllerEvent(ControllerEvent $event) {
  39.         $request $event->getRequest();
  40.         if ($request->getContentType() != 'json' || !$request->getContent()) {
  41.             return;
  42.         }
  43.         $data json_decode($request->getContent(), true);
  44.         if (json_last_error() !== JSON_ERROR_NONE) {
  45.             throw new BadRequestHttpException('invalid json body: ' json_last_error_msg());
  46.         }
  47.         $request->request->replace(is_array($data) ? $data : []);
  48.     }
  49.     /**
  50.      * Allgemeiner Exception Handler
  51.      * @param ExceptionEvent $event
  52.      */
  53.     public function onKernelException(ExceptionEvent $event) {
  54.         global $kernel;
  55.         $exception $event->getThrowable();
  56.         // Nur wichtige Events verarbeiten
  57.         if ($exception instanceof HttpException) return;
  58.         if ($kernel->getEnvironment() == 'dev')  return;
  59.         // Body erstellen
  60.         $body "Code: {$exception->getCode()}\n"
  61.             "File: {$exception->getFile()} : {$exception->getLine()}\n"
  62.             "User: " . ($kernel->getUser() ?: '') . "\n"
  63.             "\n"
  64.             "{$exception->getMessage()}\n"
  65.             "\n"
  66.             "{$exception->getTraceAsString()}";
  67.         // E-Mail versenden
  68.         $transport = new Transport\SendmailTransport();
  69.         $mailer    = new Mailer($transport);
  70.         $mailer->send((new Email())
  71.             ->subject($_ENV['APP_TITLE'] . " - Error")
  72.             ->from($_ENV['MAIL_FROM'])
  73.             ->to($_ENV['MAIL_ERROR'])
  74.             ->text($body)
  75.         );
  76.     }
  77.     /**
  78.      * Request verarbeiten - Locale und Ajax Flag
  79.      * @param RequestEvent $event
  80.      */
  81.     public function onRequest(RequestEvent $event) {
  82.         global $kernel;
  83.         if (!$event->isMainRequest()) {
  84.             return;
  85.         }
  86.         $request $event->getRequest();
  87.         // Kernel Parameter setzen
  88.         $kernel->setLocale($request->getLocale());
  89.         $kernel->setIsAjax($request->isXmlHttpRequest());
  90.     }
  91. }