interface ThemeNegotiatorInterface

Same name in other branches
  1. 9 core/lib/Drupal/Core/Theme/ThemeNegotiatorInterface.php \Drupal\Core\Theme\ThemeNegotiatorInterface
  2. 10 core/lib/Drupal/Core/Theme/ThemeNegotiatorInterface.php \Drupal\Core\Theme\ThemeNegotiatorInterface
  3. 11.x core/lib/Drupal/Core/Theme/ThemeNegotiatorInterface.php \Drupal\Core\Theme\ThemeNegotiatorInterface

Defines an interface for classes which determine the active theme.

To set the active theme, create a new service tagged with 'theme_negotiator' (see the theme.negotiator.admin_theme service in user.services.yml for an example). Your service class needs to implement this interface.

If you are setting a theme which is closely tied to the functionality of a particular page or set of pages (such that the page might not function correctly if a different theme is used), make sure to set the priority on the service to a high number so that it is not accidentally overridden by other theme negotiators. By convention, a priority of "1000" is used in these cases; see \Drupal\Core\Theme\AjaxBasePageNegotiator and core.services.yml for an example.

Hierarchy

Expanded class hierarchy of ThemeNegotiatorInterface

All classes that implement ThemeNegotiatorInterface

8 files declare their use of ThemeNegotiatorInterface
AdminDemoNegotiator.php in core/modules/block/src/Theme/AdminDemoNegotiator.php
AdminNegotiator.php in core/modules/user/src/Theme/AdminNegotiator.php
BatchNegotiator.php in core/modules/system/src/Theme/BatchNegotiator.php
CustomThemeNegotiator.php in core/modules/system/tests/modules/theme_test/src/Theme/CustomThemeNegotiator.php
DbUpdateNegotiator.php in core/modules/system/src/Theme/DbUpdateNegotiator.php

... See full list

File

core/lib/Drupal/Core/Theme/ThemeNegotiatorInterface.php, line 22

Namespace

Drupal\Core\Theme
View source
interface ThemeNegotiatorInterface {
    
    /**
     * Whether this theme negotiator should be used to set the theme.
     *
     * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
     *   The current route match object.
     *
     * @return bool
     *   TRUE if this negotiator should be used or FALSE to let other negotiators
     *   decide.
     */
    public function applies(RouteMatchInterface $route_match);
    
    /**
     * Determine the active theme for the request.
     *
     * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
     *   The current route match object.
     *
     * @return string|null
     *   The name of the theme, or NULL if other negotiators, like the configured
     *   default one, should be used instead.
     */
    public function determineActiveTheme(RouteMatchInterface $route_match);

}

Members

Title Sort descending Modifiers Object type Summary Overrides
ThemeNegotiatorInterface::applies public function Whether this theme negotiator should be used to set the theme. 10
ThemeNegotiatorInterface::determineActiveTheme public function Determine the active theme for the request. 10

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.