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
Contenus en rapport
Il est possible dans un contrôleur ou un bloc de récupérer un formulaire et de l'afficher comme n'importe quelle autre variable.
Ajouter un commentaire