Drupal 8 için, mevcut hataları gerçekten inceleyebilen ve hataların biçimlendirmesini her durum için değiştirebilen özel bir doğrulama işlevi ekleyebildim. Benim durumumda, kullanıcılara atıfta bulunan bir entity_autocomplete alanındaki hata mesajını değiştirmek istedim. Geçersiz bir kullanıcı eklenirse, doğrulama hatası "% name ile eşleşen varlık yok" ifadesini okudu. "Varlıklar" kelimesi yerine, "kullanıcılar" demesini, daha az korkutucu ve potansiyel olarak kullanıcılar için kafa karıştırıcı olmasını istedim.
İlk olarak, doğrulama işlevimi eklemek için hook_form_alter () kullanıyorum:
/**
* 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');
}
Ardından, 'my_module_custom_user_validate' işlevinde:
/**
* 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);
}
}
}
}
}
Bu yardımcı olur umarım!