vendor/friendsofsymfony/rest-bundle/EventListener/FormatListener.php line 49

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSRestBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\RestBundle\EventListener;
  11. use FOS\RestBundle\FOSRestBundle;
  12. use FOS\RestBundle\Util\StopFormatListenerException;
  13. use FOS\RestBundle\Negotiation\FormatNegotiator;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
  16. use Symfony\Component\HttpKernel\HttpKernelInterface;
  17. /**
  18.  * This listener handles Accept header format negotiations.
  19.  *
  20.  * @author Lukas Kahwe Smith <smith@pooteeweet.org>
  21.  *
  22.  * @internal
  23.  */
  24. class FormatListener
  25. {
  26.     private $formatNegotiator;
  27.     /**
  28.      * Initialize FormatListener.
  29.      *
  30.      * @param FormatNegotiatorInterface $formatNegotiator
  31.      */
  32.     public function __construct(FormatNegotiator $formatNegotiator)
  33.     {
  34.         $this->formatNegotiator $formatNegotiator;
  35.     }
  36.     /**
  37.      * Determines and sets the Request format.
  38.      *
  39.      * @param RequestEvent $event The event
  40.      *
  41.      * @throws NotAcceptableHttpException
  42.      */
  43.     public function onKernelRequest($event)
  44.     {
  45.         $request $event->getRequest();
  46.         if (!$request->attributes->get(FOSRestBundle::ZONE_ATTRIBUTEtrue)) {
  47.             return;
  48.         }
  49.         try {
  50.             $format $request->getRequestFormat(null);
  51.             if (null === $format) {
  52.                 $accept $this->formatNegotiator->getBest('');
  53.                 if (null !== $accept && 0.0 $accept->getQuality()) {
  54.                     $format $request->getFormat($accept->getValue());
  55.                     if (null !== $format) {
  56.                         $request->attributes->set('media_type'$accept->getValue());
  57.                     }
  58.                 }
  59.             }
  60.             if (null === $format) {
  61.                 if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
  62.                     throw new NotAcceptableHttpException('No matching accepted Response format could be determined');
  63.                 }
  64.                 return;
  65.             }
  66.             $request->setRequestFormat($format);
  67.         } catch (StopFormatListenerException $e) {
  68.             // nothing to do
  69.         }
  70.     }
  71. }