Sulu:自定义数据提供者,enableTypes() 参数

问题描述

我正在关注有关创建自定义数据提供程序的官方 sulu 文档:

https://docs.sulu.io/en/2.2/cookbook/smart-content-data-provider.html#dataprovider

这里,在 ExampleDataProvider 类中,在 getConfiguration() 方法中,有一段代码:

        ->enableTypes([
            ['type' => 'example-type-1','title' => 'type-translation-key-1'],['type' => 'example-type-2','title' => 'type-translation-key-2'],])

对于我的存储库类,我使用了 DataProviderRepositoryTrait 特性,正如那里所建议的那样。

那些类型是什么?他们能不能排除在外。我认为它们与智能字段类型的过滤器有关,但我不明白这是如何工作的。

更新:

实际问题是什么 - 当我尝试在后端打开编辑页面时,出现我的智能类型时出现错误:

[语义错误] line 0,col 84 near 'type WHERE entity.id': Error: Class App\Entity\MatchEvent has no association named type>

我尝试只排除添加启用类型的代码,但结果相同。

错误,我会说即使我排除了启用的类型,一些 sql 查询仍在寻找一些类型参数,但我不知道在哪里以及如何解决这个问题。

我在这里发现了一些类似的问题:How do i solve Semantical error: "Class has no association named.."

因此,如果问题相同,则意味着应将字段“类型”添加到我的自定义实体类型中。但是这篇教程文章中没有提到?

我发现:

    public function appendJoins(QueryBuilder $queryBuilder,$alias,$locale)
    {
      $queryBuilder->addSelect('type')->leftJoin($alias . '.type','type');
    }

在实现 DataProviderRepositoryInterface 接口时,我必须在我的存储库类中添加该“类型”以进行查询。如果我注释掉那行,我就不会再出错,但我的字段永远不会完成加载(微调器无限运行)

解决方法

是的,您是对的,这是通过 types 过滤的。这些类型是例如template-keys 用于 pagestitle 用于管理 ui 中的翻译。

可以在带有 Sulu/Component/Content/SmartContent/QueryBuilder 的 CustomDataProvider 中使用所选类型以按特定类型过滤项目。

DataProviderRepositoryTraitthese 行上使用类型过滤。如果自定义实体的别名不正确,您还可以覆盖 appendTypeRelation 方法。

但如果你不需要按类型过滤,你可以忽略它。

,

解决了问题。事情是(如果我想得很好)我必须将字段“type”添加到我的自定义实体(教程中没有提到)或者我必须注释掉 appendJoins() 方法中的那一行,以便该字段获胜'不会被添加到sql查询中并导致错误。

除此之外,我还有一些其他问题,这导致我的代码即使在注释该行时也无法工作,但这与此问题无关。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...