Из сообщения об ошибке мы видим, что strlen()
получает массив вместо строки:
strlen () ожидает, что параметр 1 будет строкой, массив задан в [... ] WebformMailChimpHandler-> postSave () ( строка 320 из [...])
В строка 320 этого модуля, у нас есть вызовmailchimp_subscribe()
:
mailchimp_subscribe($configuration['list'], $email, array_filter($mergevars, 'strlen'), $configuration['interest_groups'], $double_optin);
Ошибка вызвана тем, что передается в качестве третьего аргумента: array_filter($mergevars, 'strlen')
, что означает $mergevars
- ожидается, что это будет массив строк, которые будут отфильтрованы strlen
- содержит массив вместо строки в некоторый момент.
Как исправить $mergevars
?
Мы можем видеть, что он загружается из конфигурации, а затем изменяется модулями, которые реализуют некоторые перехватчики alter:
$mergevars = Yaml::decode($configuration['mergevars']);
// Allow other modules to alter the merge vars.
// @see hook_mailchimp_lists_mergevars_alter().
$entity_type = 'webform_submission';
\Drupal::moduleHandler()->alter('mailchimp_lists_mergevars', $mergevars, $webform_submission, $entity_type);
\Drupal::moduleHandler()->alter('webform_mailchimp_lists_mergevars', $mergevars, $webform_submission, $this);
Во-первых, вы можете проверить, правильно ли установлен $configuration['mergevars']
.
Затем вы можете увидеть, что происходит, и в конечном итоге исправить $mergevars
в своем собственном hook_alter:
function MODULE_mailchimp_lists_mergevars_alter(&$mergevars, &$webform_submission, &$entity_type) {
# debug/fix $mergevars
}
function MODULE_webform_mailchimp_lists_mergevars_alter(&$mergevars, &$webform_submission, &$WebformMailChimpHandler) {
# debug/fix $mergevars
}
Вероятно, проблема связана с неправильным mergevars
изменением в одном изперешить крючки. Примечание переменные передаются по ссылке.
Если вы обнаружите, что $mergevars
на самом деле является массивом строк (кажется, все хорошо) внутри вашего модуля alter hook, это означает, что другой модуль contrib действует после вашего (@seeПриоритет модуля) вызывает проблему.