Мы обновляем наши сайты один за другим с Drupal 8 на Drupal 9, и в нашей пользовательской теме есть одна строка кода, которая является последней из наших проблем.
Мы получаем следующую ошибку в представлении, которое использует открытый фильтр:
Drupal\Core\Security\UntrustedCallbackException: обратные вызовы Render #pre_render должны быть методами класса, реализующего \Drupal\Core\Security\TrustedCallbackInterface, или быть анонимной функцией. Обратный вызов был MYSITE_form_alter_views_exposed_form_MYVIEW_pre_render. См. https://www.drupal.org/node/2966725 в Drupal\Core\Render\Renderer->doTrustedCallback() (строка 96 core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php).
В файле OURTHEME.theme у нас есть эта функция:
/**
* Изменение пользовательской формы для событий.
*/
функция OURTHEME_form_alter_views_exposed_form_events_pre_render($form) {
$поля = [
'field_start_date_value',
'field_end_date_value',
'field_address_locality',
];
foreach ($fields как $field) {
$form[$field]['#title_display'] = 'после';
}
$form['field_date_range_end_value']['#prefix'] = '<div class="event-exposed-form">';
$form['field_event_address_locality']['#suffix'] = '</div>';
вернуть $ форму;
}
И функция вызывается здесь (просто фрагмент кода в этой функции):
/**
* Это изменения переменных формы перед их визуализацией.
*/
функция НАША_форма_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form' && strpos($form['#id'], 'views-exposed-form-events-') === 0) {
$form['#pre_render'][] = 'НАША ТЕМА_form_alter_views_exposed_form_events_pre_render';
}
вернуть $ форму;
}
Из того, что я мог предположить из исследований, которые я провел до сих пор, кажется, что обычно любой класс, в котором используются эти виды функций, реализует Drupal. TrustedCallbackInterface
. К сожалению, единственная информация, которую я нашел, касалась различных исправлений, применяемых к проектам на Drupal.org, поэтому я пытаюсь собрать воедино методологию из ее случайных применений.
Конечно, есть страница API Drupal, но она не особенно полезна, когда дело доходит до фактического объединения частей в полезную методологию без знания остальной части API, как тыльной стороны руки.
Кто-нибудь знает, есть ли какая-либо документация о том, как применить TrustedCallbackInterface
к функции, которая ранее использовалась $form['#pre_render'][]
, особенно в THEME.theme, который не настроен так же, как любой старый пользовательский класс в модуле?