ड्रुपल 8 के लिए, मैं एक कस्टम वेलिड फ़ंक्शन को जोड़ने में सक्षम था जो वास्तव में मौजूदा त्रुटियों की जांच कर सकता है, और प्रति मामले के आधार पर त्रुटियों के मार्कअप को बदल सकता है। मेरे मामले में, मैं एक इकाई_ उपसंहार क्षेत्र से त्रुटि संदेश को बदलना चाहता था जो उपयोगकर्ताओं को संदर्भित कर रहा था। यदि कोई अमान्य उपयोगकर्ता जोड़ा गया था, तो सत्यापन त्रुटि पढ़ी गई, "% नाम से मेल खाते कोई निकाय नहीं हैं"। शब्द "संस्थाओं" के बजाय, मैं यह कहना चाहता था कि "उपयोगकर्ता", कम डरावना और उपयोगकर्ताओं के लिए संभावित रूप से भ्रमित करने वाला हो।
सबसे पहले, मैं अपने वैध कार्य को जोड़ने के लिए hook_form_alter () का उपयोग करता हूं:
/**
* 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');
}
फिर, '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);
}
}
}
}
}
उम्मीद है की यह मदद करेगा!