Проблема с Webform Mail Chimp на Drupal 8.7.8 - PullRequest
1 голос
/ 23 октября 2019

Недавно мы обновили веб-сайт, созданный с помощью Drupal 8. Обновление было с ядра 8.6 до 8.7.8, в то же время все модули также были обновлены. Среди этих модулей были Webform и Webform Mailchimp .

После этого некоторые формы начали показывать предупреждение после отправки формы. Электронное письмо отправлено, а данные формы сохранены.

strlen() expects parameter 1 to be string, array is given in Drupal\webform_mailchimp\Plugins\WebformHancler\WebformMailChimpHandler->postSave()

Полная информация об ошибке приведена здесь: https://prnt.sc/pn76pv

Я новичок в Drupal, поэтому яДумаю, мне не следует заходить в исходный файл и вносить изменения самостоятельно. Любые рекомендации, как это исправить?

Спасибо за любую помощь

1 Ответ

1 голос
/ 25 октября 2019

Из сообщения об ошибке мы видим, что 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Приоритет модуля) вызывает проблему.

...