How to set the page title programmatically in Drupal 8 ?
How to get the page title programmatically in Drupal 9 ?
Question
Change on a form or controller
Just set ['#title'] element.
Form Example : $form['#title'] = "The title";
Controller example:
public function page() {
$output = [];
// Set title.
$output['#title'] = "My new title";
//
// Your codes ...
//
return $output;
}
Change using route and request
Example:
$title = "The new title";
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
$route->setDefault('_title', $title);
}
Get the page title programmatically in Drupal 8/9
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
$title = \Drupal::service('title_resolver')->getTitle($request, $route);
}
Comments2
does not work for existing content types
works in Drupal 8.1.7 only with nodes created by custom module/plugin, not for drupal content types like Article or Basic Page
working:
class CustomController extends ControllerBase implements ContainerInjectionInterface
public function getBlockContent() {
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
$route->setDefault('_title', $v);
}
}
}
Worked for me for login form.
Worked for me for login form.