Sonata管理员:使用多个文档类(类型)

时间:2013-12-10 12:10:50

标签: php mongodb symfony sonata-admin symfony-sonata

如你所知,所有上帝的生物都是不同的。它们最适合非关系型数据库,如。假设我有ZooCollecion个不同的Animal文档对象。

如何使用简单的“类型”选择菜单(或相关内容)使用 更改文档类

Sonata Admin - Demonstrate a "type" select-menu

Acme/DemoBundle/Resources/config/services.yml

services:
    animal.admin.page:
        class: %animal.admin.class%
        arguments: [null, %animal.class%, null] # Is this the key ?
        calls:
            - [ setContainer, [ @service_container ] ]
        tags:
            - { name: sonata.admin, manager_type: doctrine_mongodb, group: Zoo, label: Animals }

动物 - Acme/DemoBundle/Document/Animal基础文件):

/**
 * Class representing Animals
 *
 * @MongoDB\Document(collection="zoo_animals", 
 *  repositoryClass="Acme\DemoBundle\Repository\ZooRepository")
 */
class Animal
{
    /**
     * @MongoDB\Id(strategy="auto")
     */
    protected $id;

    /**
     * @MongoDB\Hash
     * @Assert\NotBlank(message="Type type should not be blank.")
     */
    protected $type;

    ...
}

Elephant Icon - (c) VisualPharm visualpharm.com大象 - Acme/DemoBundle/Document/Elephant扩展基础文档):

/**
 * Class representing Elephants
 */
class Elephant extends Animal
{
    ...
}

Turtle Icon - (c) VisualPharm visualpharm.com Turtle - Acme/DemoBundle/Document/Turtle扩展基础文档):

/**
 * Class representing Turtles
 */
class Turtle extends Animal
{
    ...
}

1 个答案:

答案 0 :(得分:2)

管理员中此类实施的一个很好的例子是sonata ecommerce中的产品创建管理员 (请参阅ProductAdminController中的createAction:https://github.com/sonata-project/ecommerce/blob/master/src/ProductBundle/Controller/ProductAdminController.php)。

基本上我们所做的是通过服务定义覆盖AdminController(参见https://github.com/sonata-project/ecommerce/blob/master/src/ProductBundle/Resources/config/admin.xml),这允许我们覆盖createAction以从类型选择开始,然后根据这个参数编辑表单(这里是不是每种说法的类型,而是产品提供者;但这基本上是相同的事情。)