Pour Drupal 8, j'ai pu ajouter une fonction de validation personnalisée qui peut réellement examiner les erreurs existantes et modifier le balisage des erreurs au cas par cas. Dans mon cas, je voulais modifier le message d'erreur d'un champ entity_autocomplete qui faisait référence aux utilisateurs. Si un utilisateur non valide a été ajouté, l'erreur de validation indique "Aucune entité ne correspond à% name". Au lieu du mot «entités», je voulais qu'il dise «utilisateurs», pour être moins effrayant et potentiellement déroutant pour les utilisateurs.
Tout d'abord, j'utilise hook_form_alter () pour ajouter ma fonction de validation:
/**
* Implements hook_form_alter().
*/
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (in_array($form_id, ['whatever_form_id_you_need_to_alter'])) {
// Add entity autocomplete custom form validation messages alter.
array_unshift($form['#validate'], 'my_module_custom_user_validate');
}
Ensuite, dans la fonction 'my_module_custom_user_validate':
/**
* Custom form validation handler that alters default validation.
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function my_module_custom_user_validate(&$form, FormStateInterface $form_state) {
// Check for any errors on the form_state
$errors = $form_state->getErrors();
if ($errors) {
foreach ($errors as $error_key => $error_val) {
// Check to see if the error is related to the desired field:
if (strpos($error_key, 'the_entity_reference_field_machine_name') !== FALSE) {
// Check for the word 'entities', which I want to replace
if (strpos($error_val->getUntranslatedString(), 'entities') == TRUE) {
// Get the original args to pass into the new message
$original_args = $error_val->getArguments();
// Re-construct the error
$error_val->__construct("There are no users matching the name %value", $original_args);
}
}
}
}
}
J'espère que cela t'aides!