需要帮助扩展 Drupal 8 自定义模块中的类



我正在使用 Drupal 8 的 elasticsearch 连接器模块来管理索引。 https://www.drupal.org/project/elasticsearch_connector

我需要在索引创建时做的一件事是向 elasticsearch 索引映射添加一些分析器和过滤器。

我已经在他们的一个类的 create(( 方法中追踪了这里发生的地方:

modules\contrib\elasticsearch_connector\src\ElasticSearch\Parameters\Factory\IndexFactory.php

有一个自定义模块,我正在尝试扩展该方法并添加到其中,但似乎无法触发它。我正确启用了该模块,因为它显示在扩展页面上。到目前为止,我的自定义模块的文件夹结构如下所示:

模块\自定义\elasticsearch_analyzer\src\elasticsearch_analyzer.php

    <?php
    namespace Drupalelasticsearch_analyzer;
    use Drupalsearch_apiIndexInterface;
    use Drupalelasticsearch_connectorElasticSearchParametersFactoryIndexFactory;
    class elasticsearch_analyzer extends IndexFactory {
      /**
       * {@inheritdoc}
       */
      public static function create(IndexInterface $index) {
        die('does this work?');
        return [
          'index' => IndexFactory::getIndexName($index),
          'body' => [
            'settings' => [
              'number_of_shards' => $index->getOption('number_of_shards', 5),
              'number_of_replicas' => $index->getOption('number_of_replicas', 1),
            ],
          ],
        ];
      }
    }

我已经围绕PSR-4标准尝试了一堆不同的组合,但似乎无法让它运行。这就是我们通常在Drupal 8中扩展内容的方式吗?我应该把这个类放在模块根目录的 .module 文件中吗?我应该将其注册为服务吗?

根据我读过的教程,除了创建块插件或简单的路由页面之外,我还没有看到任何扩展贡献模块或核心的示例。我认为现在我们已经脱离了钩子世界,我应该能够检查现有类中的代码并使用 OOP 继承覆盖它。还是不是这样?

你不能只扩展一个类。模块应该如何调用这个新类?如何将它的存在传达给其他模块,以便他们能够调用它?您的孤立类不执行任何操作。

我正在阅读这个模块的源代码。此IndexFactory类用于注册为搜索 API 模块后端的SearchApiElasticsearchBackend类(即搜索 API 知道此后端存在并调用它(。

可悲的是,这个IndexManager类只是硬编码到后端,没有办法注入你自己的。该类仅具有静态方法,因此直接调用它们。即使您要创建自己的搜索后端并扩展SearchApiElasticsearchBackend也必须在任何地方YourCustomIndexManager替换IndexManager

您必须直接在模块中更改create()方法才能执行所需的操作。

最新更新