<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 2019-07-18
* Time: 17:05
*/
namespace App\EventSubscriber\Routing;
use App\Event\Routing\FilterGeneratedUrlEvent;
use App\Event\Routing\RoutingEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CityPrefixSubscriber implements EventSubscriberInterface
{
const CITY_PARAMETER = 'city';
public function ignoreCityParameter(FilterGeneratedUrlEvent $event): void
{
$url = $event->getUrl();
$routeParameters = $event->getParameters();
if (isset($routeParameters[self::CITY_PARAMETER]) && false !== $pos = strpos($url, '?')) {
$qs = substr($url, $pos + 1);
parse_str($qs, $parameters);
unset($parameters[self::CITY_PARAMETER]);
if (!empty($parameters)) {
$url = str_replace("?$qs", '?'.http_build_query($parameters), $url);
} else {
$url = str_replace("?$qs", '', $url);
}
$event->setUrl($url);
}
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
RoutingEvents::POST_GENERATE => 'ignoreCityParameter',
];
}
}