Đối với Drupal 8, tôi đã có thể thêm một chức năng xác thực tùy chỉnh có thể thực sự kiểm tra các lỗi hiện có và thay đổi đánh dấu các lỗi trên cơ sở từng trường hợp. Trong trường hợp của tôi, tôi muốn thay đổi thông báo lỗi từ trường entity_autocomplete đang tham chiếu người dùng. Nếu người dùng không hợp lệ được thêm vào, lỗi xác thực sẽ ghi "Không có thực thể nào khớp với% name". Thay vì từ "thực thể", tôi muốn nói nó là "người dùng", để bớt đáng sợ và có khả năng gây nhầm lẫn cho người dùng.
Đầu tiên, tôi sử dụng hook_form_alter () để thêm hàm xác thực của mình:
/**
* 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');
}
Sau đó, trong hàm '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);
}
}
}
}
}
Hi vọng điêu nay co ich!