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

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 <[email protected]>
  21.  *
  22.  * @internal
  23.  */
  24. class FormatListener
  25. {
  26.     private $formatNegotiator;
  27.     public function __construct(FormatNegotiator $formatNegotiator)
  28.     {
  29.         $this->formatNegotiator $formatNegotiator;
  30.     }
  31.     /**
  32.      * @param RequestEvent $event The event
  33.      */
  34.     public function onKernelRequest($event)
  35.     {
  36.         $request $event->getRequest();
  37.         if (!$request->attributes->get(FOSRestBundle::ZONE_ATTRIBUTEtrue)) {
  38.             return;
  39.         }
  40.         try {
  41.             $format $request->getRequestFormat(null);
  42.             if (null === $format) {
  43.                 $accept $this->formatNegotiator->getBest('');
  44.                 if (null !== $accept && 0.0 $accept->getQuality()) {
  45.                     $format $request->getFormat($accept->getValue());
  46.                     if (null !== $format) {
  47.                         $request->attributes->set('media_type'$accept->getValue());
  48.                     }
  49.                 }
  50.             }
  51.             if (null === $format) {
  52.                 if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
  53.                     throw new NotAcceptableHttpException('No matching accepted Response format could be determined');
  54.                 }
  55.                 return;
  56.             }
  57.             $request->setRequestFormat($format);
  58.         } catch (StopFormatListenerException $e) {
  59.             // nothing to do
  60.         }
  61.     }
  62. }