Last active
November 25, 2022 14:24
-
-
Save MatthieuScarset/d96dff54ac31496e3bf725c7459a9ddf to your computer and use it in GitHub Desktop.
Get the page title from a Url in Drupal 8+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @file | |
* Contains a custom function to get the title from a Url. | |
*/ | |
use Drupal\Core\Url; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* Get the title from a Url. | |
* | |
* @param \Drupal\Core\Url $url | |
* A given URL. | |
* | |
* @return string|null | |
* The resolved title or nothing. | |
* | |
* @example Get the title for current page. | |
* $current_url = Url::fromRoute('<current>'); | |
* $page_title = mymodule_get_title_from_url($current_url); | |
* | |
* @example Get the title from a given path. | |
* $path = '/my-custom-page-alias'; | |
* $uri = 'internal:' . $path; | |
* $url = Url::fromUri($uri); | |
* $page_title = mymodule_get_title_from_url($url); | |
* | |
* @example Get the title from an entity. | |
* $url = $entity->toUrl('canonical'); | |
* $page_title = mymodule_get_title_from_url($url); | |
* | |
* @example Get the title from a current node page. | |
* $node = \Drupal::routeMatch()->getParameter('node'); | |
* $url = $node->toUrl('canonical'); | |
* $page_title = mymodule_get_title_from_url($url); | |
*/ | |
function mymodule_get_title_from_url(Url $url) { | |
$router = \Drupal::service('router'); | |
$title_resolver = \Drupal::service('title_resolver'); | |
$route_match = $router->match($url->toString()); | |
$route = $route_match['_route_object'] ?? NULL; | |
if ($route) { | |
try { | |
$path = $url->setAbsolute(TRUE)->toString(); | |
$request = Request::create($path); | |
$attributes = $router->matchRequest($request); | |
$request->attributes->add($attributes); | |
return $title_resolver->getTitle($request, $route); | |
} catch (\Exception $e) { | |
\Drupal::logger('mymodule')->error($e->getMessage()); | |
} | |
} | |
return NULL; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment