我正在使用Drupal 8的elasticsearch连接器模块来管理索引。 https://www.drupal.org/project/elasticsearch_connector
在索引创建时需要做的一件事是在弹性搜索索引映射中添加一些分析器和过滤器。
我已经在其中一个类的create()方法中找到了这里发生的地方:
模块\的contrib \ elasticsearch_connector \ SRC \ ElasticSearch \参数\厂\ IndexFactory.php
我有一个自定义模块,我正在尝试扩展该方法并添加到它但似乎无法启动它。我正确地启用了模块,因为它显示在扩展页面上。到目前为止,我的自定义模块的文件夹结构如下所示:
模块\定制\ elasticsearch_analyzer \ SRC \ elasticsearch_analyzer.php
<?php
namespace Drupal\elasticsearch_analyzer;
use Drupal\search_api\IndexInterface;
use Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\IndexFactory;
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继承覆盖它。或者情况不是这样吗?
答案 0 :(得分:0)
你不能只扩展一个类。该模块应该如何调用这个新类?如何将其存在传达给其他模块,以便能够调用它?孤立的班级没有做任何事情。
我正在阅读这个模块的源代码。 IndexManager
类中使用了此SearchApiElasticsearchBackend
类,该类被注册为Search API模块的后端(即搜索API知道该后端存在并调用它。)
可悲的是,这个IndexManager
类只是硬编码到后端,没有办法注入你自己的。该类只有静态方法,因此可以直接调用它们。即使您要创建自己的搜索后端并扩展YourCustomIndexManager
,也必须将create()
替换为UPDATE exampleTable
SET price = price + 27;
。
您必须直接在模块中更改{{1}}方法,以执行您想要的操作。