J'essaie de modifier les instructions d'étiquette et de champ pour le champ de nom sur le formulaire de création de compte d'utilisateur. Je suis nouveau dans le codage et pensais que ce serait une tâche facile.
Mon module personnalisé est activé et j'ai effacé les caches, mais aucune de mes modifications n'apparaît. Voici mon code. J'ai essayé un tas de variations et un tas de recherches, mais je ne vois jamais un seul signe de ce fonctionnement.
<?php
/**
* @file
* Contains mymodule.module.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_FORM_ID_alter() on behalf of mymodule.module.
* @see \Array method Array at Array
*/
function mymodule_form_account_alter(&$form, FormStateInterface $form_state, $form_id) {
// print_r($form); die;
// ksm($form_id);
if ($form_id == 'user_register_form') {
// print_r($form); die;
// kint($form_id);
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('First and last name'),
'#maxlength' => USERNAME_MAX_LENGTH,
'#description' => $this->t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (')."),
);
}
drupal_set_message('mymodule_form_account_alter() executed.');
}
Voici le bon code:
/**
* Implements hook_form_FORM_ID_alter().
*/
function <your_module>_form_user_register_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
$form['account']['name']['#title'] = t('First and last name');
$form['account']['name']['#description'] = t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (').");
}
n'hésitez pas à demander :) amusez-vous!
La raison pour laquelle vous ne voyez aucun changement dans le formulaire d'enregistrement d'utilisateur est que la hook_form_FORM_ID_alter()
pour le formulaire user_register_form a le mauvais nom .
Au lieu de mymodule_form_account_alter(&$form, FormStateInterface $form_state, $form_id)
(ce qui suppose qu'il est défini pour un module dont le nom de machine est mymodule ), il devrait être mymodule_form_user_registration_form_alter(&$form, FormStateInterface $form_state, $form_id)
. Je suppose toujours que le crochet est défini pour un module dont le nom de la machine est mymodule ; si le hook est défini pour un module dont le nom de machine est my_custom_module , par exemple, ce hook doit être défini comme my_custom_module_form_user_registration_form_alter(&$form, FormStateInterface $form_state, $form_id)
.
Correction du nom du hook, il y a toujours des erreurs dans le code que vous affichez.
Une ligne comme if ($form_id == 'user_register_form')
n'est pas nécessaire. Puisque vous implémentez hook_form_FORM_ID_alter()
, vous n'avez pas besoin de vérifier quel formulaire est appelé, car vous dites déjà Drupal pour quel formulaire il doit être appelé.
Si vous devez modifier certaines propriétés d'un élément de formulaire, vous n'utilisez pas $form['name'] = array( /* .... */);
qui supprime toutes les propriétés de cet élément de formulaire et ajoute niquement celles que vous ajouter au tableau.
Le code correct serait similaire au suivant.
function mymodule_form_user_register_form_alter(&$form, FormStateInterface $form_state, $form_id) {
$form['name']['#title'] = $this->t('First and last name');
$form['name']['#description'] = $this->t("Rewrite this about spaces, periods (.), hyphens (-) and apostrophes (').");
}
Remarquerez que:
Bien que $form_id
Soit l'un des paramètres transmis au hook, vous n'en avez pas besoin pour comprendre sous quelle forme le hook est appelé. En fait, je ne vois aucune raison pour que hook_form_FORM_ID_alter()
utilise ce paramètre, sauf dans le cas où l'ID du formulaire doit être concaténé à une autre chaîne. (Dans ce cas, j'utiliserais $form_id . 'another string'
.)
Si vous testez lorsqu'un hook est invoqué, n'utilisez pas drupal_set_message()
(qui est également une fonction obsolète). Utilisez l'enregistreur Drupal, par exemple avec une ligne comme \Drupal::logger('mymodule')->notice('mymodule_form_account_alter() executed.');
.