【问题标题】:Sulu: how to query custom entity type?Sulu:如何查询自定义实体类型?
【发布时间】:2026-02-01 18:30:01
【问题描述】:

我已经定义了自定义实体类型“匹配”,它是后端可编辑的,一切都按预期工作。

现在我需要一种方法来查询该类型的内容。智能内容字段类型可以做到这一点吗?我希望像这样的 xml 可以解决问题:

   <property name="matches" type="smart_content">
        <!-- @see https://docs.sulu.io/en/2.2/reference/content-types/smart_content.html -->
        <meta>
            <title lang="en">Matches</title>
            <title lang="de">Streichhölzer</title>
        </meta>

        <params>
            <param name="provider" value="lists"/>
            <param name="types" value="matchevents"/>
            <param name="max_per_page" value="5"/>
            <param name="page_parameter" value="m"/>
        </params>
    </property>

但这并没有帮助。可以用“smart_content”字段类型来完成吗?我是的 - 怎么样?如果没有 - 实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: entity sulu


    【解决方案1】:

    您必须为您的实体创建一个自定义 DataProvider,然后在 xml 定义中使用您的提供程序。

    所以你必须创建一个实现DataProviderRepositoryInterface 的存储库。此存储库用于查询实体。 此外,您还必须创建实际的数据提供者服务。这个类应该从BaseDataProvider扩展,最后你必须使用标签sulu.smart_content.data_provider和一个别名来定义服务。

    别名在xml文件中使用,例如

       <property name="matches" type="smart_content">
        <meta>
            <title lang="en">Matches</title>
            <title lang="de">Streichhölzer</title>
        </meta>
    
        <params>
            <param name="provider" value="myCustomDataProviderAlias"/>
        </params>
    </property>
    

    查看文档以获取有关如何创建自定义数据提供程序的分步教程。 https://docs.sulu.io/en/2.2/cookbook/smart-content-data-provider.html#how-to-create-a-custom-dataprovider

    【讨论】:

    • 这个文档部分没问题,但是缺少一些关键信息:在哪里存储数据项类文件?在哪里存储定义服务的 xml 代码?
    • 这取决于你和你的项目结构,你想在哪里存储DataItemClass,没有具体的位置。服务定义取决于您是实现捆绑包还是直接在项目中使用自定义提供程序。如果你直接在你的项目中使用它,服务可以在services.yml文件中定义,类似于github.com/sulu/sulu-demo/blob/master/config/services.yaml#L42在symfony中,每个服务都可以在xmlyamlphp配置中定义. symfony docs
    • 谢谢。只需要一个提示 - XML 中的那些“工厂方法”和“工厂服务”参数在 YAML 版本中看起来如何?从这里:docs.sulu.io/en/2.2/cookbook/…
    • 检查不同映射的最佳方法是 symfony 文档 :) 在这里你可以看到不同的可能性symfony factories documentation
    最近更新 更多