Symfony Sonata Admin Bundle无需实体的使用方法

9

有没有一种不使用实体(即没有使用Doctrine)的方式来使用Sonata Admin Bundle?

我需要列出某个目录中的文件,这个列表没有存储在数据库中。

我尝试的第一种方法是声明自己的模型管理器,但是有些地方需要Doctrine查询等。

我知道有MongoDB文档管理器Sonata MongoDB Admin,但在我的情况下并不是很有用。

有什么想法吗?


你只需要列出文件吗?如果是这样,你不需要创建一个Sonata Admin类来完成。只需使用PHP中可用的许多与目录交互的方法之一即可。 - dyelawn
@dyelawn 不,我需要具备排序和过滤结果的能力。 - falinsky
我在SO上问了同样的问题,答案是:http://stackoverflow.com/questions/38221948/how-to-create-a-custom-action-not-related-to-entity-from-sonata-admin - Tsounabe
你可以查看这个链接:https://dev59.com/G2Qo5IYBdhLWcg3wiv7A#22507027 - Tsounabe
1个回答

4
在这里找到的文档:http://sonata-project.org/bundles/admin/master/doc/reference/getting_started.html 看起来在创建管理部分,第2步需要一个模型:
  1. Admin服务的代码(默认为服务的名称)
  2. 此Admin类映射的模型(必需)
  3. 将处理管理操作的控制器(默认为SonataAdminBundle:CRUDController)
示例显示使用manager_type作为ORM设置的服务。
# Acme/DemoBundle/Resources/config/admin.yml
services:
    sonata.admin.post:
        class: Acme\DemoBundle\Admin\PostAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Content", label: "Post" }
        arguments:
            - ~
            - Acme\DemoBundle\Entity\Post
            - ~
        calls:
            - [ setTranslationDomain, [AcmeDemoBundle]]

总的来说,Symfony并没有对模型的要求做出严格规定。它可以是Doctrine或您构建的自定义内容。在服务的情况下,它只是一个对象。我没有看到文档中任何关于需要数据库的说明。


你知道有关创建自定义模型的好文档吗? - falinsky
2
@falinsky Symfony在传统意义上并不是MVC模型。只要你有一个类对象,你就可以对它做任何事情。这篇Symfony文章解释了如何将一个类设置为服务。这可能会让你朝着正确的方向前进,因为它解释了我所说的一些内容。http://symfony.com/doc/current/book/service_container.html - Shawn
2
你只是解释了一些基本的东西...对于我的情况没有什么帮助。你应该明白我们谈论的是Sonata Admin Bundle,而不仅仅是Symfony的一般性问题。 - falinsky
2
很抱歉,我无法在此为您编写代码,因为您的情况非常特殊,需要进行大量开发。但是,我已经向您提供了所需的信息和工具。基本上,如果您有一个具有功能的代码类,它可以被注册为服务。因此,请注册该类,这个服务在您的情况下将成为您的“模型”。我给您提供的链接解释了如何将邮件类用作服务。这与该捆绑包的工作方式非常相似,因为它向您展示了控制器和服务以及如何在示例中使用它们。 - Shawn
你找到解决方法了吗?我正在尝试在管理类中使用来自自定义查询和自定义水合的对象。当我在管理服务中定义实体类时,由于它不是ORM类,我无法使用它。它会抛出一个错误(getMetadata)。 - Rmannn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接