Sulu:自定义数据提供者,enableTypes()参数
Sulu: custom data provider, enableTypes() parameters
我正在关注有关创建自定义数据提供程序的官方 sulu 文档:
https://docs.sulu.io/en/2.2/cookbook/smart-content-data-provider.html#dataprovider
这里,在 ExampleDataProvider class 中,在 getConfiguration() 方法中有一段代码:
->enableTypes([
['type' => 'example-type-1', 'title' => 'type-translation-key-1'],
['type' => 'example-type-2', 'title' => 'type-translation-key-2'],
])
我的存储库 class 我正在使用 DataProviderRepositoryTrait 特性,正如那里所建议的那样。
这些类型是什么?能排除吗。我假设它们与智能字段类型的过滤器有关,但我不明白这是如何工作的。
更新:
实际问题是什么 - 当我尝试在后端打开编辑页面时,出现了我的智能类型,但出现错误:
[语义错误] 第 0 行,'type WHERE entity.id' 附近的第 84 列:错误:Class App\Entity\MatchEvent 没有名为 type[= 的关联45=]
我尝试只排除添加启用类型的代码,但它是一样的。
由于错误,我会说一些 sql 查询仍在寻找某些类型参数,即使我排除了启用的类型,但我不知道在哪里以及如何解决这个问题。
我在这里发现了一些类似的问题:How do i solve Semantical error: "Class has no association named.."
因此,如果问题相同,则意味着应将字段“type”添加到我的自定义实体类型中。但是这篇教程文章里没有提到?
我发现:
public function appendJoins(QueryBuilder $queryBuilder, $alias, $locale)
{
$queryBuilder->addSelect('type')->leftJoin($alias . '.type', 'type');
}
在实现 DataProviderRepositoryInterface 接口时我必须在我的存储库 class 中添加这个 'type' 来查询。如果我注释掉该行,我不会再收到错误,但我的字段永远不会完成加载(微调器是 运行 无限)
是的,你没看错,这是为了 types
的过滤。这些类型是例如template-keys
用于 pages
,title
用于管理中的翻译 ui。
所选类型可以在您的 CustomDataProvider 中使用 Sulu/Component/Content/SmartContent/QueryBuilder
按特定类型过滤项目。
DataProviderRepositoryTrait
在 these 行上使用类型过滤。如果您的自定义实体的别名不正确,您也可以覆盖 appendTypeRelation
方法。
但如果你不需要按类型过滤,你可以忽略它。
问题解决了。事情是(如果我弄清楚的话)我必须将字段“类型”添加到我的自定义实体(教程中未提及)或者我必须注释掉 appendJoins()
方法中的一行以便该字段获胜' 未添加到 sql 查询并导致错误。
除此之外,我还有一些其他问题,这导致我的代码即使在该行被注释时也无法运行,但这与此问题无关。
我正在关注有关创建自定义数据提供程序的官方 sulu 文档:
https://docs.sulu.io/en/2.2/cookbook/smart-content-data-provider.html#dataprovider
这里,在 ExampleDataProvider class 中,在 getConfiguration() 方法中有一段代码:
->enableTypes([
['type' => 'example-type-1', 'title' => 'type-translation-key-1'],
['type' => 'example-type-2', 'title' => 'type-translation-key-2'],
])
我的存储库 class 我正在使用 DataProviderRepositoryTrait 特性,正如那里所建议的那样。
这些类型是什么?能排除吗。我假设它们与智能字段类型的过滤器有关,但我不明白这是如何工作的。
更新:
实际问题是什么 - 当我尝试在后端打开编辑页面时,出现了我的智能类型,但出现错误:
[语义错误] 第 0 行,'type WHERE entity.id' 附近的第 84 列:错误:Class App\Entity\MatchEvent 没有名为 type[= 的关联45=]
我尝试只排除添加启用类型的代码,但它是一样的。
由于错误,我会说一些 sql 查询仍在寻找某些类型参数,即使我排除了启用的类型,但我不知道在哪里以及如何解决这个问题。
我在这里发现了一些类似的问题:How do i solve Semantical error: "Class has no association named.."
因此,如果问题相同,则意味着应将字段“type”添加到我的自定义实体类型中。但是这篇教程文章里没有提到?
我发现:
public function appendJoins(QueryBuilder $queryBuilder, $alias, $locale)
{
$queryBuilder->addSelect('type')->leftJoin($alias . '.type', 'type');
}
在实现 DataProviderRepositoryInterface 接口时我必须在我的存储库 class 中添加这个 'type' 来查询。如果我注释掉该行,我不会再收到错误,但我的字段永远不会完成加载(微调器是 运行 无限)
是的,你没看错,这是为了 types
的过滤。这些类型是例如template-keys
用于 pages
,title
用于管理中的翻译 ui。
所选类型可以在您的 CustomDataProvider 中使用 Sulu/Component/Content/SmartContent/QueryBuilder
按特定类型过滤项目。
DataProviderRepositoryTrait
在 these 行上使用类型过滤。如果您的自定义实体的别名不正确,您也可以覆盖 appendTypeRelation
方法。
但如果你不需要按类型过滤,你可以忽略它。
问题解决了。事情是(如果我弄清楚的话)我必须将字段“类型”添加到我的自定义实体(教程中未提及)或者我必须注释掉 appendJoins()
方法中的一行以便该字段获胜' 未添加到 sql 查询并导致错误。
除此之外,我还有一些其他问题,这导致我的代码即使在该行被注释时也无法运行,但这与此问题无关。