src/Listener/ResponseListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use Symfony\Component\HttpFoundation\Response;
  4. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  5. use Psr\Log\LoggerInterface;
  6. class ResponseListener
  7. {
  8.   private $logger;
  9.   public function __constructLoggerInterface $logger ) {
  10.       $this->logger $logger;
  11.   }
  12.   // L'argument de la méthode est un FilterResponseEvent
  13.   public function processResponse(FilterResponseEvent $event)
  14.   {
  15.     // On teste si la requête est bien la requête principale (et non une sous-requête)
  16.     if (!$event->isMasterRequest()) {
  17.       return;
  18.     }
  19.     // On récupère la réponse que le gestionnaire a insérée dans l'évènement
  20.     $response $event->getResponse();
  21.     $request $event->getRequest();
  22.     // Utile quand on veut ecrire les erreurs en logs
  23.     // if ($response->getStatusCode() != 200 && $response->getStatusCode() != 201 && $response->getStatusCode() != 204) {
  24.     //   if ($posts = $request->request->all()) {
  25.     //     $this->logger->error(print_r($posts, true));
  26.     //   }
  27.     //   if ($gets = $request->query->all()) {
  28.     //     $this->logger->error(print_r($gets, true));
  29.     //   }
  30.     //   $this->logger->critical(print_r($response->getContent(), true));
  31.     // }
  32.     //On vérifie que c'est bien une requête lié à l'api
  33.     if (strstr($request->getPathInfo(), 'api') == false) {
  34.       return;
  35.     }
  36.     //On vérifie que la contenu est bien de type json
  37.     if ($request->getRequestFormat() != 'json') {
  38.       return;
  39.     }
  40.     //get content
  41.     $content $response->getContent();
  42.     $content json_decode($content);
  43.     //add message if response has one
  44.     if (isset($content->message) && $content->message !== NULL && !is_object($content->message) && strlen($content->message) > 1) {
  45.       $message $content->message;
  46.       unset($content->message);
  47.     }
  48.     //on vérifie que ce n'est pas une exception/erreur
  49.     if (isset($content->status) && $content->status == "error") {
  50.       return;
  51.     }
  52.     $status 'success';
  53.     if ($response->getStatusCode() > 399) {
  54.       $status 'error';
  55.     }
  56.     $newResp = array(
  57.       'status'      => $status,
  58.       'status_code' => $response->getStatusCode(),
  59.       'status_text' => Response::$statusTexts[$response->getStatusCode()],
  60.       'content'     => $content
  61.     );
  62.     if (isset($message)) {
  63.       $newResp['message'] = $message;
  64.     }
  65.     if ($response->getStatusCode() == 404) {
  66.       $newResp['message'] = "Introuvables";
  67.     }
  68.     $response->setContent(json_encode($newResp));
  69.     // Puis on insère la réponse modifiée dans l'évènement
  70.     $event->setResponse($response);
  71.   }
  72. }