Chúng tôi đang nâng cấp từng trang web của mình từ Drupal 8 lên Drupal 9 và có một dòng mã trong chủ đề tùy chỉnh của chúng tôi, đây là vấn đề cuối cùng của chúng tôi.
Chúng tôi gặp lỗi sau trên Chế độ xem sử dụng bộ lọc bị lộ:
Drupal\Core\Security\UntrustedCallbackException: Các cuộc gọi lại kết xuất #pre_render phải là phương thức của một lớp triển khai \Drupal\Core\Security\TrustedCallbackInterface hoặc là một hàm ẩn danh. Cuộc gọi lại là MYSITE_form_alter_views_exposed_form_MYVIEW_pre_render. Xem https://www.drupal.org/node/2966725 trong Drupal\Core\Render\Renderer->doTrustedCallback() (dòng 96 của core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php).
Trong tệp OURTHEME.theme, chúng tôi có chức năng này:
/**
* Thay đổi biểu mẫu tùy chỉnh cho các sự kiện.
*/
chức năng OURTHEME_form_alter_views_exposed_form_events_pre_render($form) {
trường $ = [
'trường_bắt_đầu_ngày_giá_trị',
'trường_cuối_ngày_giá_trị',
'trường_địa chỉ_địa phương',
];
foreach ($fields as $field) {
$form[$field]['#title_display'] = 'sau';
}
$form['field_date_range_end_value']['#prefix'] = '<div class="event-exposed-form">';
$form['field_event_address_locality']['#suffix'] = '</div>';
trả về biểu mẫu $;
}
Và chức năng được gọi ở đây (chỉ là một đoạn mã trong chức năng này):
/**
* Đây là những thay đổi đối với các biến biểu mẫu trước khi chúng được hiển thị.
*/
function OURTHEME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form' && strpos($form['#id'], 'views-exposed-form-events-') === 0) {
$form['#pre_render'][] = 'OURTHEME_form_alter_views_exposed_form_events_pre_render';
}
trả về biểu mẫu $;
}
Từ những gì tôi có thể dự đoán từ nghiên cứu mà tôi đã thực hiện cho đến nay, có vẻ như thông thường bất kỳ lớp nào mà các loại chức năng này được sử dụng đều đã triển khai Drupal's TrustedCallbackGiao diện
. Thật không may, thông tin duy nhất mà tôi tìm thấy nằm trong các bản vá khác nhau được áp dụng cho các dự án trên Drupal.org, vì vậy tôi đang cố gắng tập hợp một phương pháp từ các ứng dụng ngẫu nhiên của nó.
Tất nhiên, có trang API Drupal, nhưng điều đó không đặc biệt hữu ích khi thực sự ghép các phần lại với nhau thành một phương pháp hữu ích mà bạn không cần biết phần còn lại của API như lòng bàn tay.
Có ai biết nếu có bất kỳ tài liệu nào về cách áp dụng TrustedCallbackGiao diện
đến một chức năng mà trước đây đã sử dụng $form['#pre_render'][]
, đặc biệt là trong THEME.theme không được thiết lập giống với bất kỳ lớp tùy chỉnh cũ nào trong Mô-đun?