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: Drupal\modulename\Routing\RouteSubscriber
tags:
- { name: event_subscriber, priority: 100 }
modulename/src/Routing/RouteSubscriber.php
namespace Drupal\modulename\Routing;
use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;
/**
* 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' => '\Drupal\modulename\Controller\ListController::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?