Drupal - Ajouter des champs au formulaire « Paramètres de base du site »

Voici comment ajouter un ou plusieurs champs au formulaire de configuration « paramètres de base du site ».

On commence par créer un service qui nous permettra de surcharger le formulaire de base : 

modules/mon_module/mon_module.services: 

services:
  mon_module.route_subscriber:
    class: Drupal\mon_module\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

 

modules/mon_module/src/Routing/RouteSubscriber.php

<?php
namespace Drupal\mon_module\Routing;
use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;
use Drupal\mon_module\Form\BasicSiteInformationForm;
class RouteSubscriber extends RouteSubscriberBase {
  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    if ($route = $collection->get('system.site_information_settings'))
      $route->setDefault('_form', BasicSiteInformationForm::class);
  }
}

Et la surcharge du formulaire :

modules/mon_module/src/Form/BasicSiteInformationForm.php

<?php

namespace Drupal\mon_module\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\system\Form\SiteInformationForm;


class BasicSiteInformationForm extends SiteInformationForm {

  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('system.site');
    $form = parent::buildForm($form, $form_state);
    // On ajoute nos champs
    $form['site_information']['email_service_commercial'] = [
      '#type' => 'email',
      '#title' => t('Adresse email Service Commercial'),
      '#default_value' => $config->get('email_service_commercial') ?? '',
      '#description' => t("Adresse à laquelle sera envoyée les notifications de création de compte"),
      '#required' => TRUE,
    ];
    return $form;
  }

  public function submitForm(array &$form, FormStateInterface $form_state) {
    // Et on les enregistre
    $this->config('system.site')
      ->set('email_service_commercial', $form_state->getValue('email_service_commercial'))
      ->save();
    parent::submitForm($form, $form_state);
  }
}

Et voila : 

Image
Formulaire paramètres de base du site

Contenus en rapport

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...