2013-12-10 2 views
3

Как вы знаете, все существа Бога разные. Они лучше всего вписываются в нереляционную базу данных, такую ​​как . Предположим, у меня есть ZooCollecion с различными объектами документа Animal.Sonata Admin: Используйте несколько классов документов (типы)

Как я могу использовать , до изменить класс документа с помощью простого меню выбора типа (или что-то связанного)?

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 Черепаха - Acme/DemoBundle/Document/Turtle (расширяет базовый документ):

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

ответ

2

Хорошим примером такого типа реализации в админке будет создание продукта администратора в sonata ecommerce (см. createAction в ProductAdminController: 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, чтобы начать с выбора типа, а затем изменить форму в соответствии с этим аргументом (здесь это не тип например, но поставщик продуктов, но в основном это одно и то же).

+1

Hugo Briand, ваши ссылки мертвы ... – Ophiuchus

+0

Обновлено Ophiuschus, спасибо :) –