Có cách nào để đặt cái này trong form_alter không? Hay tôi chỉ nên xác thực trạng thái hộp kiểm qua JS?
bạn có thể thay thế #cần thiết
bằng cách đặt trình xử lý xác thực tùy chỉnh trong móc thay đổi biểu mẫu, nếu bạn muốn tạo thông báo lỗi phía máy chủ:
$form_state->setErrorByName('field_tos_accept', $error_message);
Khi tôi thêm '#required_error', điều này - theo hiểu biết của tôi - sẽ đưa ra thông báo lỗi khi biểu mẫu được gửi.
#required_error'
được giới thiệu vào năm 2011, nhưng khi Drupal 8 được phát hành, nó dường như đã ngừng hoạt động trong các trình duyệt hỗ trợ xác thực biểu mẫu HTML5 và vì vậy nó chưa bao giờ thực sự được chấp nhận.
Tuy nhiên, bạn có thể sử dụng thuộc tính biểu mẫu HTML5 hợp thức hóa
để tắt xác thực biểu mẫu phía máy khách, thì thuộc tính này hoạt động trở lại và bạn nhận được thông báo lỗi tùy chỉnh mà không có trình xử lý xác thực tùy chỉnh:
function themename_form_alter(&$form, &$form_state, $form_id) {
// đối với các biểu mẫu thực thể $form_id bao gồm
// ENTITY_TYPE_BUNDLE_FORM_MODE_form
// GÓI chỉ khi thực thể có gói
// FORM_MODE chỉ khi không mặc định
// Ví dụ:
// node_article_edit_form - biểu mẫu chỉnh sửa nút cho loại nội dung bài viết
// node_page_form - node tạo form cho trang kiểu nội dung
// các nút sử dụng để tạo biểu mẫu chế độ biểu mẫu mặc định
if ($form_id == 'node_nodetype_form') {
$form['#attributes']['novalidate'] = 'novalidate';
$form['field_tos_accept'] = [
'#type' => 'hộp kiểm',
'#title' => t('Tôi đồng ý với điều khoản dịch vụ.'),
'#cân nặng' => '999',
'#required' => ĐÚNG,
'#required_error' => t('Vui lòng chấp nhận điều khoản dịch vụ.'),
];
}
}
Nhìn thấy https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-novalidate