- Issue created by @amateescu
- Merge request !11211Draft: Add a proposal for the new method on RouteMatchInterface. β (Open) created by amateescu
- π·π΄Romania amateescu
Started a MR with a proposal for the new method. Feedback welcome :)
- πΊπΈUnited States smustgrave
Appears small feedback has been provided by @acbramley.
Wonderif there is a current instance in core that could use this and be converted to show it's worth?
- π·π΄Romania amateescu
Addressed all the feedback so far, but there's one thing left.. the main reason for this API: checking whether the passed-in route name is deprecated.
The problem is that the only way to do that currently is
\Drupal\Core\Routing\RouteProvider::getRouteAliases()
, which would mean an uncached db query for every call to the newRouteMatch::isRouteName()
method. I think we need a way to retrieve and cache (persistent and static) all aliased/deprecated routes somewhere in the route provider. Setting back to NW to get feedback on that. - π¬π§United Kingdom catch
I'm a bit confused by #5 but I might have it backwards.
RouteProvider::getRouteByName()
has this:$result = reset($routes); if ($result instanceof Alias) { $alias = $result->getId(); if ($result->isDeprecated()) { $deprecation = $result->getDeprecation($name); @trigger_error($deprecation['message'], E_USER_DEPRECATED); } return $this->getRouteByName($alias); }
So... in isRouteName(), if it matches the current rout name, we can assume it's not a deprecated alias because no-one should ever actually land on one and just return TRUE.
If it doesn't match, we can call
RouteProvider::getRouteByName()
on each of the passed in routes, this will trigger the deprecation we need.Route preloading should mean this isn't an additional database query. There is some rationalisation to do in π RoutePreloader loads a lot of routes Active but it's just another thing to take into account on that issue.