Skip to content

Commit

Permalink
adaption to new router (symfony v5.1)
Browse files Browse the repository at this point in the history
  • Loading branch information
pmaxs committed Aug 1, 2020
1 parent 4dc5d40 commit 5657170
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 26 deletions.
3 changes: 1 addition & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
"minimum-stability": "stable",
"license": "MIT",
"require": {
"php": "^5.5.9 || ^7.0",
"symfony/framework-bundle": "^2.8 || ^3.0 || ^4.0 || ^5.0"
"symfony/framework-bundle": "^5.1"
},
"require-dev": {
},
Expand Down
3 changes: 0 additions & 3 deletions src/DependencyInjection/Compiler/SetJMSI18nRouting.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,5 @@ public function process(ContainerBuilder $container)

$container->findDefinition('pmaxs_path2query.router')
->setParent('jms_i18n_routing.router');

$container->findDefinition('pmaxs_path2query.listener.path2query')
->replaceArgument(0, new Expression("service('router').getOriginalRouteCollection()"));
}
}
49 changes: 38 additions & 11 deletions src/EventListener/Path2QueryListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@

use Pmaxs\Path2queryBundle\Router\Path2QueryRouter;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\RouterInterface;

/**
* Listener to resolve locale from path or host
Expand All @@ -15,17 +16,17 @@ class Path2QueryListener implements EventSubscriberInterface
{
/**
* Route collection
* @var RouteCollection
* @var RouterInterface
*/
protected $routes;
protected $router;

/**
* Constructor
* @param RouteCollection $routes
* @param RouterInterface $router
*/
public function __construct(RouteCollection $routes)
public function __construct(RouterInterface $router)
{
$this->routes = $routes;
$this->router = $router;
}

/**
Expand All @@ -43,15 +44,15 @@ public static function getSubscribedEvents()

/**
* Setups routes, adds query parameter
* @param GetResponseEvent $event
* @param RequestEvent $event
*/
public function setupRoutes(GetResponseEvent $event)
public function setupRoutes(RequestEvent $event)
{
if ($event->getRequestType() != HttpKernelInterface::MASTER_REQUEST) {
return;
}

foreach ($this->routes as $routeName => $route) {
foreach ($this->router->getPath2QueryRouteCollection() as $routeName => $route) {
if (!$route->getDefault(Path2QueryRouter::ENABLED_PARAM)) {
continue;
}
Expand All @@ -66,9 +67,9 @@ public function setupRoutes(GetResponseEvent $event)

/**
* Resolves query from path
* @param GetResponseEvent $event
* @param RequestEvent $event
*/
public function resolveQuery(GetResponseEvent $event)
public function resolveQuery(RequestEvent $event)
{
$request = $event->getRequest();

Expand All @@ -87,4 +88,30 @@ public function resolveQuery(GetResponseEvent $event)
}
}
}

/**
* Resolves query from path
* @param RequestEvent $event
*/
public function resolveQuery1(RequestEvent $event)
{
$request = $event->getRequest();

if (($query = $request->get(Path2QueryRouter::QUERY_PARAM))) {
$query = explode('/', trim($query, '/'));

foreach ($query as $queryPart) {
$queryPart = urldecode($queryPart);
$queryPart = explode('-', $queryPart, 2);
$param = isset($queryPart[0]) ? trim($queryPart[0]) : null;
$value = isset($queryPart[1]) ? trim($queryPart[1]) : null;

if (isset($param) && strlen($param) && !$request->query->has($param)) {
$_REQUEST[$param] = $value;
$_GET[$param] = $value;
$request->query->set($param, $value);
}
}
}
}
}
4 changes: 2 additions & 2 deletions src/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ services:
pmaxs_path2query.listener.path2query:
class: Pmaxs\Path2queryBundle\EventListener\Path2QueryListener
arguments:
- "@=service('router').getRouteCollection()"
- "@router"
public: false
tags:
- { name: kernel.event_subscriber }
- { name: kernel.event_subscriber }
40 changes: 32 additions & 8 deletions src/Router/Path2QueryRouter.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
if (class_exists('\\JMS\\I18nRoutingBundle\\Router\\I18nRouter')) {
class Path2QueryRouterTmp extends \JMS\I18nRoutingBundle\Router\I18nRouter
{
protected function getPath2QueryRouteCollection()
const ROUTER_ORIGIN = 'JMS';

public function getPath2QueryRouteCollection()
{
return $this->getOriginalRouteCollection();
}
Expand All @@ -14,7 +16,9 @@ protected function getPath2QueryRouteCollection()
} else {
class Path2QueryRouterTmp extends \Symfony\Bundle\FrameworkBundle\Routing\Router
{
protected function getPath2QueryRouteCollection()
const ROUTER_ORIGIN = 'SYMFONY';

public function getPath2QueryRouteCollection()
{
return $this->getRouteCollection();
}
Expand All @@ -33,15 +37,35 @@ class Path2QueryRouter extends Path2QueryRouterTmp
*/
const QUERY_PARAM = '__path2query_param__';

/**
* {@inheritdoc}
*/
public function getPath2QueryRouteCollection()
{
return parent::getPath2QueryRouteCollection();
}

public function generate($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH)
{
$route = $this->getPath2QueryRouteCollection()->get($name);
if ('JMS' == self::ROUTER_ORIGIN) {
$route = $this->getPath2QueryRouteCollection()->get($name);
} else {
$generator = $this->getGenerator();
$locale = $parameters['_locale']
?? $generator->getContext()->getParameter('_locale')
?: $this->defaultLocale;
$route = null;

if (null !== $locale) {
$routes = $this->getPath2QueryRouteCollection();

if (is_null($route->getDefault(self::ENABLED_PARAM)) || isset($parameters[self::QUERY_PARAM])) {
return parent::generate($name, $parameters, $referenceType);
do {
if (null !== ($route = $routes->get($name.'.'.$locale)) && $route->getDefault('_canonical_route') === $name) {
break;
}
} while (false !== $locale = strstr($locale, '_', true));
}

if (empty($route) || empty($route->getDefault(self::ENABLED_PARAM)) || isset($parameters[self::QUERY_PARAM])) {
return parent::generate($name, $parameters, $referenceType);
}
}

$routeVars = $route->compile()->getVariables();
Expand Down

0 comments on commit 5657170

Please sign in to comment.