Extension Points¶
The RouteBundle provides several extension points for customizing route behavior.
RouteDefaultsProvider¶
The most common extension point. Implement RouteDefaultsProviderInterface to map
routes to controller defaults for your custom entities.
See the main RouteBundle documentation for a complete example.
namespace App\Routing;
use Sulu\Route\Application\Routing\Matcher\RouteDefaultsProviderInterface;
use Sulu\Route\Domain\Model\Route;
class MyRouteDefaultsProvider implements RouteDefaultsProviderInterface
{
public function getDefaults(Route $route): array
{
return [
'_controller' => MyController::class . '::indexAction',
'entity' => $this->loadEntity($route->getResourceId()),
];
}
public static function getResourceKey(): string
{
return 'my_entities';
}
}
The service is automatically tagged when implementing the interface. The resourceKey
returned by getResourceKey() must match the resourceKey of routes you want to handle.
Webspace Route Generator¶
Implement WebspaceRouteGeneratorInterface to customize URL generation for specific webspaces.
This is useful when different webspaces have different URL structures or domains.
namespace App\Routing;
use Sulu\Route\Application\Routing\Generator\WebspaceRouteGeneratorInterface;
use Symfony\Component\Routing\RequestContext;
class CustomWebspaceRouteGenerator implements WebspaceRouteGeneratorInterface
{
public function generate(
RequestContext $context,
string $slug,
string $locale,
): string {
// Custom URL generation logic for this webspace
return 'https://custom-domain.com/' . $locale . $slug;
}
public function getWebspace(): string
{
return 'my_webspace';
}
}
The service is automatically tagged via autoconfiguration. If not using autoconfiguration:
services:
App\Routing\CustomWebspaceRouteGenerator:
tags:
- { name: sulu_route.webspace_route_generator, webspace: my_webspace }