Drupal 8.7.8 中 Web 表单 Mailchimp 的问题
Problem with Webform Mail Chimp on 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 的新手,所以我认为我不应该进入源文件并自己进行更改。有关如何解决此问题的任何建议?
感谢您的帮助
从错误信息中,我们可以看到 strlen()
接收的是一个数组而不是字符串:
strlen() expects parameter 1 to be string, array is given in [...] WebformMailChimpHandler->postSave()
(line 320 of [...])
在这个模块的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
?
我们可以看到它是从配置中加载的,然后由实现一些更改挂钩的模块更改:
$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
}
该问题可能是由于其中一个更改挂钩的 mergevars
错误更改引起的。注意变量是通过引用传递的。
如果你发现 $mergevars
实际上是你模块 alter hook 中的一个字符串数组(看起来一切都很好),这意味着另一个 contrib 模块在 after 你的(@see module priority)导致了这个问题。
最近更新了一个用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 的新手,所以我认为我不应该进入源文件并自己进行更改。有关如何解决此问题的任何建议?
感谢您的帮助
从错误信息中,我们可以看到 strlen()
接收的是一个数组而不是字符串:
strlen() expects parameter 1 to be string, array is given in [...] WebformMailChimpHandler->postSave() (line 320 of [...])
在这个模块的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
?
我们可以看到它是从配置中加载的,然后由实现一些更改挂钩的模块更改:
$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
}
该问题可能是由于其中一个更改挂钩的 mergevars
错误更改引起的。注意变量是通过引用传递的。
如果你发现 $mergevars
实际上是你模块 alter hook 中的一个字符串数组(看起来一切都很好),这意味着另一个 contrib 模块在 after 你的(@see module priority)导致了这个问题。