我试图在处理程序中使用我的自定义服务(在webform6.0-beta1中):
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
文件如下所示:
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):
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'));
}
?>
这会导致错误(缩写为重要部分):
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)
...
我做错了什么?
发布于 2020-11-30 14:59:17
问题是,您正在将Ecomail
对象实例化到您的Ecomail构造函数$this->ecomail = new \Ecomail($this->config->get('api_key'));
中,这是一种分叉炸弹。
您的Ecomail正在创建一个Ecomail本身,创建另一个Ecomail,等等。这是一个无限循环
https://drupal.stackexchange.com/questions/298488
复制相似问题