Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace CoreBundle\Listener;
- use CoreBundle\Entity\ImageUrlInterface;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use JMS\Serializer\EventDispatcher\ObjectEvent;
- use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
- use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
- class SerializationSubscriber implements EventSubscriberInterface
- {
- /** @var RequestStack */
- protected $requestStack;
- /** @var Request */
- private $request;
- /** @var UploaderHelper */
- private $uploadHelper;
- private $imagine;
- /**
- * SerializationSubscriber constructor.
- * @param RequestStack $requestStack
- * @param UploaderHelper $uploadHelper
- * @param $imagine
- */
- public function __construct(RequestStack $requestStack, UploaderHelper $uploadHelper, $imagine)
- {
- $this->requestStack = $requestStack;
- $this->request = $requestStack->getCurrentRequest();
- $this->uploadHelper = $uploadHelper;
- $this->imagine = $imagine;
- }
- /**
- * @inheritdoc
- */
- static public function getSubscribedEvents()
- {
- return [
- [
- 'event' => 'serializer.pre_serialize',
- 'method' => 'onPreSerialize'
- ]
- ];
- }
- public function onPreSerialize(ObjectEvent $event)
- {
- $object = $event->getObject();
- if ($object instanceof ImageUrlInterface) {
- if ($this->request->headers->has('x-screen-density')) {
- $density = intval($this->request->headers->get('x-screen-density'));
- $imageUrl = $this->imagine->getBrowserPath($this->uploadHelper->asset($object, 'image'), $this->getFilterByDensity($density));
- } else {
- $imageUrl = $this->imagine->getBrowserPath($this->uploadHelper->asset($object, 'image'), 'normal');
- }
- $object->setImageUrl($imageUrl);
- }
- return $object;
- }
- private function getFilterByDensity(int $density)
- {
- switch ($density) {
- case 1:
- return 'small';
- case 2:
- return 'medium';
- case 3:
- return 'normal';
- default:
- return 'normal';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement