Set the page title programmatically in Drupal 9 | Drupal 8

Set the page title programmatically in Drupal 9

Submitted by editor on Thu, 12/10/2015 - 18:24
Question

How to set the page title programmatically in Drupal 8 ?
How to get the page title programmatically in Drupal 9 ?

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);
}

Comments

Thomas M. (not verified)

Wed, 07/27/2016 - 14:11

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);
                    }

      }

}

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.