src/Juki/Bundle/AppBundle/EventListener/FixUrlProtocolListener.php line 28

Open in your IDE?
  1. <?php
  2. namespace Juki\Bundle\AppBundle\EventListener;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\Form\FormEvent;
  5. use Symfony\Component\Form\FormEvents;
  6. /**
  7.  * Adds a protocol to a URL if it doesn't already have one.
  8.  *
  9.  * @author Bernhard Schussek <bschussek@gmail.com>
  10.  */
  11. class FixUrlProtocolListener implements EventSubscriberInterface
  12. {
  13.     private $defaultProtocol;
  14.     private $defaultHost;
  15.     /**
  16.      * @param string|null $defaultProtocol The URL scheme to add when there is none or null to not modify the data
  17.      */
  18.     public function __construct(?string $defaultProtocol 'http'$defaultHost '')
  19.     {
  20.         $this->defaultProtocol $defaultProtocol;
  21.         $this->defaultHost     $defaultHost;
  22.     }
  23.     public function onSubmit(FormEvent $event)
  24.     {
  25.         $data $event->getData();
  26.         if (is_string($data)) {
  27.             $valid preg_match('%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu',
  28.                 $data$result);
  29.             if (!$valid) {
  30.                 if (strpos('/'substr($data01)) === false) {
  31.                     $data "/" $data;
  32.                 }
  33.                 $data $this->defaultProtocol '://' $_SERVER['FRONT_HOST'] . $data;
  34.             }
  35.             $event->setData($data);
  36.         }
  37. //        if ($this->defaultProtocol && $data && \is_string($data) && !preg_match('~^[\w+.-]+://~', $data)) {
  38. //            $event->setData($this->defaultProtocol . '://' . $this->defaultHost . $data);
  39. //        }
  40.     }
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [FormEvents::SUBMIT => 'onSubmit'];
  44.     }
  45. }