8 - 如何从模块覆盖 DatabaQueue
8 - How to override the DatabaQueue from module
我必须覆盖 Drupal 8 中 DatabaseQueue
的默认实现。这样做的原因并不重要。
我在查看 QueueFactory
时了解到每个队列 worker 可以有不同的 QueueInterface
实现。如果未指定,它们会退回到 DatabaseQueue
(事实上,可以指定不同的队列 factory,但无论如何这种简化都非常准确)。
QueueFactory
使用 Settings
对象作为队列的配置源:
$this->settings->get('queue_service_' . $name, $this->settings->get('queue_default', 'queue.database'));
问题是(据我所知)Settings
对象从 sites/*/settings.php
文件获取配置数据。事实上,如果我用队列配置扩展这个文件,就像这样:
$settings['queue_service_my_custom_queue_worker'] = 'my_module.my_custom_queue_factory';
然后它工作正常。
但这就是交易。我正在创建一个将分发给许多客户的模块。这种编辑 settings.php
文件的方法并不理想。想象一下,要求每个人都做出这种改变。它很容易出错。那么,有没有办法从我的模块扩展这些设置?
我尝试使用 configuration overrides,但它不适用于这种情况。
您可以修饰 queue
服务,为您的自定义队列提供其 get()
方法的自定义行为。
查看此文档:https://www.phase2technology.com/blog/using-symfony-service
我必须覆盖 Drupal 8 中 DatabaseQueue
的默认实现。这样做的原因并不重要。
我在查看 QueueFactory
时了解到每个队列 worker 可以有不同的 QueueInterface
实现。如果未指定,它们会退回到 DatabaseQueue
(事实上,可以指定不同的队列 factory,但无论如何这种简化都非常准确)。
QueueFactory
使用 Settings
对象作为队列的配置源:
$this->settings->get('queue_service_' . $name, $this->settings->get('queue_default', 'queue.database'));
问题是(据我所知)Settings
对象从 sites/*/settings.php
文件获取配置数据。事实上,如果我用队列配置扩展这个文件,就像这样:
$settings['queue_service_my_custom_queue_worker'] = 'my_module.my_custom_queue_factory';
然后它工作正常。
但这就是交易。我正在创建一个将分发给许多客户的模块。这种编辑 settings.php
文件的方法并不理想。想象一下,要求每个人都做出这种改变。它很容易出错。那么,有没有办法从我的模块扩展这些设置?
我尝试使用 configuration overrides,但它不适用于这种情况。
您可以修饰 queue
服务,为您的自定义队列提供其 get()
方法的自定义行为。
查看此文档:https://www.phase2technology.com/blog/using-symfony-service