首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:向webform (6.x)处理程序注入自定义服务时达到的最大函数嵌套级别'512‘

错误:向webform (6.x)处理程序注入自定义服务时达到的最大函数嵌套级别'512‘
EN

Drupal用户
提问于 2020-11-30 14:50:33
回答 1查看 65关注 0票数 0

我试图在处理程序中使用我的自定义服务(在webform6.0-beta1中):

代码语言:javascript
运行
复制
class TriggerAutomationWebformHandler extends WebformHandlerBase {

  /**
   * Ecomail.
   *
   * @var \Drupal\ecomail_automation\EcomailInterface
   */
  protected $ecomail;

  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->ecomail = $container->get('ecomail_automation.ecomail');
  }
?>

mymodule.services.yml文件如下所示:

代码语言:javascript
运行
复制
services:
  ecomail_automation.ecomail:
    class: Drupal\ecomail_automation\Ecomail
    arguments: [ '@config.factory', '@logger.factory' ]

我的Drupal\ecomail_automation\Ecomail类是这样构造的(\Ecomail类在全局命名空间中是不同的类-参见https://packagist.org/packages/ecomailcz/ecomail):

代码语言:javascript
运行
复制
  public function __construct(ConfigFactoryInterface $config, LoggerChannelFactoryInterface $logger_factory) {
    $this->config = $config->get('ecomail_webform.settings');
    $this->logger = $logger_factory;
    $this->ecomail = new \Ecomail($this->config->get('api_key'));
  }
?>

这会导致错误(缩写为重要部分):

代码语言:javascript
运行
复制
Error: Maximum function nesting level of '512' reached, aborting! in Drupal\Component\Plugin\PluginBase->__construct() (line 53 of core/lib/Drupal/Component/Plugin/PluginBase.php).

Drupal\Component\Plugin\PluginBase->__construct(Array, 'trigger_automation', Array) (Line: 141)
Drupal\webform\Plugin\WebformHandlerBase::create(Object, Array, 'trigger_automation', Array) (Line: 43)
Drupal\ecomail_automation\Plugin\WebformHandler\TriggerAutomationWebformHandler::create(Object, Array, 'trigger_automation', Array) (Line: 21)
Drupal\Core\Plugin\Factory\ContainerFactory->createInstance('trigger_automation', Array) (Line: 76)
Drupal\Component\Plugin\PluginManagerBase->createInstance('trigger_automation', Array) (Line: 81)
Drupal\Core\Plugin\DefaultLazyPluginCollection->initializePlugin('trigger_automation') (Line: 35)
Drupal\webform\Plugin\WebformHandlerPluginCollection->initializePlugin('trigger_automation') (Line: 80)
Drupal\Component\Plugin\LazyPluginCollection->get('trigger_automation') (Line: 40)
Drupal\webform\Plugin\WebformHandlerPluginCollection->initializePlugin('trigger_automation') (Line: 80)
Drupal\Component\Plugin\LazyPluginCollection->get('trigger_automation') (Line: 40)
Drupal\webform\Plugin\WebformHandlerPluginCollection->initializePlugin('trigger_automation') (Line: 80)
Drupal\Component\Plugin\LazyPluginCollection->get('trigger_automation') (Line: 40)
...

我做错了什么?

EN

回答 1

Drupal用户

发布于 2020-11-30 14:59:17

问题是,您正在将Ecomail对象实例化到您的Ecomail构造函数$this->ecomail = new \Ecomail($this->config->get('api_key'));中,这是一种分叉炸弹。

您的Ecomail正在创建一个Ecomail本身,创建另一个Ecomail,等等。这是一个无限循环

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/298488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档