Проблема с Webform Mail Chimp на Drupal 8.7.8
Недавно мы обновили сайт, созданный с помощью 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, поэтому я думаю, что не должен заходить в исходный файл и вносить изменения самостоятельно. Любые рекомендации о том, как это исправить?
Спасибо за любую помощь

Ответы - Проблема с Webform Mail Chimp на Drupal 8.7.8 / Problem with Webform Mail Chimp on Drupal 8.7.8

25.10.2019 02:15:59
Из сообщения об ошибке видно, что 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 в одном из крючков alter. Примечание переменные передаются по ссылке.
Если вы обнаружите, что $mergevars
на самом деле является массивом строк (кажется, все хорошо) внутри вашего модуля alter hook, это означает, что другой модуль contrib, действующий после вашего (@see module priority), вызывает проблему.
