Upgrade the Router module
Edit on GitHubThis migration guide is a part of the Silex migration effort.
To upgrade Router, do the following:
- Install a new module using Composer:
composer require spryker/router
- Remove old service providers, if you have them in the project:
\Silex\Provider\RoutingServiceProvider
\Silex\Provider\ServiceControllerServiceProvider
\Silex\Provider\UrlGeneratorServiceProvider
\Spryker\Shared\Application\Communication\Plugin\ServiceProvider\RoutingServiceProvider
\Spryker\Shared\Application\ServiceProvider\RoutingServiceProvider
\Spryker\Zed\Application\Communication\Plugin\ServiceProvider\RoutingServiceProvider
\Spryker\Zed\Application\Communication\Plugin\ServiceProvider\UrlGeneratorServiceProvider
\Spryker\Glue\GlueApplication\Plugin\Rest\ServiceProvider\GlueRoutingServiceProvider
-
Replace all ControllerProviders in
Pyz\Yves\ShopApplication\YvesBootstrap::getControllerProviderStack()
with the correspondingRouteProviderPlugin
entities. -
Remove the following deprecated constants:
\Spryker\Shared\Application\ApplicationConstants::YVES_SSL_ENABLED
\Spryker\Shared\Application\ApplicationConstants::YVES_SSL_EXCLUDED
\Spryker\Shared\Application\ApplicationConstants::ZED_SSL_ENABLED
\Spryker\Shared\Application\ApplicationConstants::ZED_SSL_EXCLUDED
They need to be replaced in your configuration files with new ones:
\Spryker\Shared\Router\RouterConstants::YVES_IS_SSL_ENABLED
\Spryker\Shared\Router\RouterConstants::YVES_SSL_EXCLUDED_ROUTE_NAMES
\Spryker\Shared\Router\RouterConstants::ZED_IS_SSL_ENABLED
\Spryker\Shared\Router\RouterConstants::ZED_SSL_EXCLUDED_ROUTE_NAMES
- Add the new plugins to dependency providers:
Zed integration
<?php
namespace Pyz\Zed\Application;
use Spryker\Zed\Application\ApplicationDependencyProvider as SprykerApplicationDependencyProvider;
use Spryker\Zed\Router\Communication\Plugin\Application\RouterApplicationPlugin;
class ApplicationDependencyProvider extends SprykerApplicationDependencyProvider
{
...
/**
* @return \Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface[]
*/
protected function getApplicationPlugins(): array
{
return [
...
new RouterApplicationPlugin(),
...
];
}
...
}
Yves integration
<?php
namespace Pyz\Yves\ShopApplication;
use Spryker\Yves\ShopApplication\ShopApplicationDependencyProvider as SprykerShopApplicationDependencyProvider;
use Spryker\Yves\Router\Plugin\Application\RouterApplicationPlugin;
class ShopApplicationDependencyProvider extends SprykerShopApplicationDependencyProvider
{
...
/**
* @return \Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface[]
*/
protected function getApplicationPlugins(): array
{
return [
...
new RouterApplicationPlugin(),
...
];
}
...
}
- Enable additional plugins.
Console Zed integration
<?php
namespace Pyz\Zed\Console;
use Spryker\Zed\Console\ConsoleDependencyProvider as SprykerConsoleDependencyProvider;
use Spryker\Zed\Router\Communication\Plugin\Console\RouterCacheWarmUpConsole;
use Spryker\Zed\Router\Communication\Plugin\Console\RouterDebugZedConsole;
/**
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @method \Pyz\Zed\Console\ConsoleConfig getConfig()
*/
class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider
{
/**
* @param \Spryker\Zed\Kernel\Container $container
*
* @return \Symfony\Component\Console\Command\Command[]
*/
protected function getConsoleCommands(Container $container)
{
$commands = [
...
new RouterCacheWarmUpConsole(),
...
];
if ($this->getConfig()->isDevelopmentConsoleCommandsEnabled()) {
...
$commands[] = new RouterDebugZedConsole();
...
}
return $commands;
}
}
EventDispatcher Zed integration
<?php
namespace Pyz\Zed\EventDispatcher;
use Spryker\Zed\EventDispatcher\EventDispatcherDependencyProvider as SprykerEventDispatcherDependencyProvider;
use Spryker\Zed\Router\Communication\Plugin\EventDispatcher\RequestAttributesEventDispatcherPlugin;
use Spryker\Zed\Router\Communication\Plugin\EventDispatcher\RouterListenerEventDispatcherPlugin;
use Spryker\Zed\Router\Communication\Plugin\EventDispatcher\RouterLocaleEventDispatcherPlugin;
use Spryker\Zed\Router\Communication\Plugin\EventDispatcher\RouterSslRedirectEventDispatcherPlugin;
class EventDispatcherDependencyProvider extends SprykerEventDispatcherDependencyProvider
{
/**
* @return \Spryker\Shared\EventDispatcherExtension\Dependency\Plugin\EventDispatcherPluginInterface[]
*/
protected function getEventDispatcherPlugins(): array
{
return [
...
new RouterLocaleEventDispatcherPlugin(),
new RouterListenerEventDispatcherPlugin(),
new RouterSslRedirectEventDispatcherPlugin(),
new RequestAttributesEventDispatcherPlugin(),
...
];
}
}
Router Zed integration
<?php
namespace Pyz\Zed\Router;
use Spryker\Zed\Router\Communication\Plugin\Router\RouterEnhancer\BackwardsCompatibleUrlRouterEnhancerPlugin;
use Spryker\Zed\Router\Communication\Plugin\Router\ZedDevelopmentRouterPlugin;
use Spryker\Zed\Router\Communication\Plugin\Router\ZedRouterPlugin;
use Spryker\Zed\Router\RouterDependencyProvider as SprykerRouterDependencyProvider;
class RouterDependencyProvider extends SprykerRouterDependencyProvider
{
/**
* @return \Spryker\Zed\RouterExtension\Dependency\Plugin\RouterPluginInterface[]
*/
protected function getRouterPlugins(): array
{
return [
new ZedRouterPlugin(),
// This router will only be hit, when no other router is able to match/generate
new ZedDevelopmentRouterPlugin(),
];
}
/**
* @return \Spryker\Zed\RouterExtension\Dependency\Plugin\RouterEnhancerPluginInterface[]
*/
protected function getRouterEnhancerPlugins(): array
{
return [
new BackwardsCompatibleUrlRouterEnhancerPlugin(),
];
}
}
Console Yves integration
<?php
namespace Pyz\Yves\Console;
use Spryker\Yves\Console\ConsoleDependencyProvider as SprykerConsoleDependencyProvider;
use Spryker\Yves\Kernel\Container;
use Spryker\Yves\Router\Plugin\Application\RouterApplicationPlugin;
use Spryker\Yves\Router\Plugin\Console\RouterCacheWarmUpConsole;
use Spryker\Yves\Router\Plugin\Console\RouterDebugYvesConsole;
class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider
{
/**
* @param \Spryker\Yves\Kernel\Container $container
*
* @return \Symfony\Component\Console\Command\Command[]
*/
protected function getConsoleCommands(Container $container): array
{
return [
new RouterDebugYvesConsole(),
new RouterCacheWarmUpConsole(),
];
}
}
EventDispatcher Yves integration
<?php
namespace Pyz\Yves\EventDispatcher;
use Spryker\Yves\EventDispatcher\EventDispatcherDependencyProvider as SprykerEventDispatcherDependencyProvider;
use Spryker\Yves\Router\Plugin\EventDispatcher\RouterListenerEventDispatcherPlugin;
use Spryker\Yves\Router\Plugin\EventDispatcher\RouterLocaleEventDispatcherPlugin;
use Spryker\Yves\Router\Plugin\EventDispatcher\RouterSslRedirectEventDispatcherPlugin;
class EventDispatcherDependencyProvider extends SprykerEventDispatcherDependencyProvider
{
/**
* @return \Spryker\Shared\EventDispatcherExtension\Dependency\Plugin\EventDispatcherPluginInterface[]
*/
protected function getEventDispatcherPlugins(): array
{
return [
...
new RouterLocaleEventDispatcherPlugin(),
new RouterLocaleEventDispatcherPlugin(),
new RouterListenerEventDispatcherPlugin(),
new RouterSslRedirectEventDispatcherPlugin(),
...
];
}
}
Router Yves integration
<?php
namespace Pyz\Yves\Router;
use Spryker\Yves\HealthCheck\Plugin\Router\HealthCheckRouteProviderPlugin;
use Spryker\Yves\Router\Plugin\RouteManipulator\LanguageDefaultPostAddRouteManipulatorPlugin;
use Spryker\Yves\Router\Plugin\RouteManipulator\SslPostAddRouteManipulatorPlugin;
use Spryker\Yves\Router\Plugin\RouteManipulator\StoreDefaultPostAddRouteManipulatorPlugin;
use Spryker\Yves\Router\Plugin\Router\YvesDevelopmentRouterPlugin;
use Spryker\Yves\Router\Plugin\Router\YvesRouterPlugin;
use Spryker\Yves\Router\Plugin\RouterEnhancer\LanguagePrefixRouterEnhancerPlugin;
use Spryker\Yves\Router\Plugin\RouterEnhancer\StorePrefixRouterEnhancerPlugin;
use Spryker\Yves\Router\RouterDependencyProvider as SprykerRouterDependencyProvider;
use SprykerShop\Yves\HomePage\Plugin\Router\HomePageRouteProviderPlugin;
use SprykerShop\Yves\StorageRouter\Plugin\Router\StorageRouterPlugin;
class RouterDependencyProvider extends SprykerRouterDependencyProvider
{
/**
* @return \Spryker\Yves\RouterExtension\Dependency\Plugin\RouterPluginInterface[]
*/
protected function getRouterPlugins(): array
{
return [
new YvesRouterPlugin(),
new StorageRouterPlugin(),
// This router will only be hit, when no other router is able to match/generate
new YvesDevelopmentRouterPlugin(),
];
}
/**
* @return \Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface[]
*/
protected function getRouteProvider(): array
{
return [
...
new HomePageRouteProviderPlugin(),
...
];
}
/**
* @return \Spryker\Yves\RouterExtension\Dependency\Plugin\PostAddRouteManipulatorPluginInterface[]
*/
protected function getPostAddRouteManipulator(): array
{
return [
new LanguageDefaultPostAddRouteManipulatorPlugin(),
new StoreDefaultPostAddRouteManipulatorPlugin(),
new SslPostAddRouteManipulatorPlugin(),
];
}
/**
* @return \Spryker\Yves\RouterExtension\Dependency\Plugin\RouterEnhancerPluginInterface[]
*/
protected function getRouterEnhancerPlugins(): array
{
return [
new LanguagePrefixRouterEnhancerPlugin(),
new StorePrefixRouterEnhancerPlugin(),
];
}
}
EventDispatcher Glue integration
<?php
namespace Pyz\Glue\EventDispatcher;
use Spryker\Glue\EventDispatcher\EventDispatcherDependencyProvider as SprykerEventDispatcherDependencyProvider;
use Spryker\Glue\Router\Plugin\EventDispatcher\RouterListenerEventDispatcherPlugin;
class EventDispatcherDependencyProvider extends SprykerEventDispatcherDependencyProvider
{
/**
* @return \Spryker\Shared\EventDispatcherExtension\Dependency\Plugin\EventDispatcherPluginInterface[]
*/
protected function getEventDispatcherPlugins(): array
{
return [
...
new RouterListenerEventDispatcherPlugin(),
...
];
}
}
Thank you!
For submitting the form