function ThemeController::setDefaultTheme
Same name in other branches
- 8.9.x core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
- 10 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
- 11.x core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
Set the default theme.
Parameters
\Symfony\Component\HttpFoundation\Request $request: A request object containing a theme name.
Return value
\Symfony\Component\HttpFoundation\RedirectResponse|array Redirects back to the appearance admin page or the confirmation form if an experimental theme will be installed.
Throws
\Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException Throws access denied when no theme is set in the request.
1 string reference to 'ThemeController::setDefaultTheme'
- system.routing.yml in core/
modules/ system/ system.routing.yml - core/modules/system/system.routing.yml
File
-
core/
modules/ system/ src/ Controller/ ThemeController.php, line 211
Class
- ThemeController
- Controller for theme handling.
Namespace
Drupal\system\ControllerCode
public function setDefaultTheme(Request $request) {
$config = $this->configFactory
->getEditable('system.theme');
$theme = $request->query
->get('theme');
if (isset($theme)) {
// Get current list of themes.
$themes = $this->themeHandler
->listInfo();
// Display confirmation form if an experimental theme is being installed.
if ($this->willInstallExperimentalTheme($theme)) {
return $this->formBuilder()
->getForm(ThemeExperimentalConfirmForm::class, $theme, TRUE);
}
// Check if the specified theme is one recognized by the system.
// Or try to install the theme.
if (isset($themes[$theme]) || $this->themeInstaller
->install([
$theme,
])) {
$themes = $this->themeHandler
->listInfo();
// Set the default theme.
$config->set('default', $theme)
->save();
// The status message depends on whether an admin theme is currently in
// use: a value of 0 means the admin theme is set to be the default
// theme.
$admin_theme = $config->get('admin');
if (!empty($admin_theme) && $admin_theme != $theme) {
$this->messenger()
->addStatus($this->t('Please note that the administration theme is still set to the %admin_theme theme; consequently, the theme on this page remains unchanged. All non-administrative sections of the site, however, will show the selected %selected_theme theme by default.', [
'%admin_theme' => $themes[$admin_theme]->info['name'],
'%selected_theme' => $themes[$theme]->info['name'],
]));
}
else {
$this->messenger()
->addStatus($this->t('%theme is now the default theme.', [
'%theme' => $themes[$theme]->info['name'],
]));
}
}
else {
$this->messenger()
->addError($this->t('The %theme theme was not found.', [
'%theme' => $theme,
]));
}
return $this->redirect('system.themes_page');
}
throw new AccessDeniedHttpException();
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.