Drupal 8.7.8上的Webform Mail Chimp出现问题

时间:2019-10-23 18:43:27

标签: drupal drupal-8 drupal-webform

最近,我们更新了一个使用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 个答案:

答案 0 :(得分:1)

从错误消息中,我们可以看到strlen()收到一个数组而不是一个字符串:

  

strlen()期望参数1为字符串,数组在[...] WebformMailChimpHandler-> postSave()中给出   ([...]的第320行

在此模块的Line 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 hook的模块所更改:

$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']的设置是否正确。

然后,您可以查看发生了什么,并最终在自己的hook_alter中修复$mergevars

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
}

此问题很可能是由于其中一个alter hook中的mergevars错误更改引起的。注意变量通过引用传递。

如果您发现$mergevars实际上是模块alter hook内的字符串数组(看起来似乎很好),则意味着另一个contrib模块在您的之后(@see模块优先级)导致此问题。