I have a module where I created a route /page/tag/{term}
that uses a controller for modifications to how the term page is handled.
The problem is that when any page displays these term links, they don’t use the custom route, but the default /taxonomy/term/{id}
.
How can I tell the taxonomy term links to use my custom route?
Adding the path as the term alias skips over the custom route entirely.
OR, how would I get rid of the custom route and create a pathauto pattern using the same path, but tell those pages to use my custom controller?
I have tried both methods without success…
Here is what I’ve tried with modifying the existing route:
modulename.services.yml
services: modulename.route_subscriber: class: DrupalmodulenameRoutingRouteSubscriber tags: - { name: event_subscriber, priority: 100 }
modulename/src/Routing/RouteSubscriber.php
namespace DrupalmodulenameRouting; use DrupalCoreRoutingRouteSubscriberBase; use SymfonyComponentRoutingRouteCollection; /** * Listens to the dynamic route events. */ class RouteSubscriber extends RouteSubscriberBase { /** * {@inheritdoc} */ protected function alterRoutes(RouteCollection $collection) { if ($route = $collection->get('entity.taxonomy_term.canonical')) { // i've tried both of these $route->addDefaults(['_controller' => 'DrupalmodulenameControllerListController::list_by_tag' ']); $route->addDefaults(['_title' => 'test']); } } }
Edit: after seeing this, I thought about keeping my custom route and using the alterRoutes to change the links…
$route->setPath('/page/tag');
That worked, but it adds on ?taxonomy_term=123
How can I get the term name into the url? /page/tag/term
Update:
Still can’t figure out how to get the term name from the route (without loading the taxonomy entity – I’d imagine that is too much load)
Also, I will need to make sure I’m in a specific vocabulary before changing the route.
Any ideas?