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 ContainerInjectionInterfacepublic 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.