2015-07-14 3 views
0

Я прохожу весь день, читая, тестируя, перечитывая и повторно проверяя, я не могу найти правильное решение моей проблемы.Sonata Admin, разделите одну сущность (в db) на большее число переключателей блокировки дисплея поле для дискриминации

Предположим, у вас есть файловая сущность, тип которой переключается в другой блок. (Я имею в виду, что в базе данных у меня есть только 1 таблица файлов, но на дисплее у меня есть блок «изображения», другие «документы» и другая «карта»). Все 3 - это файлы с другим значением для поля «type».

Я знаю, что самым простым должно быть иметь 3 таблицы, но я не хочу разрушать свою архитектуру из-за использования сонаты.

Я полностью понимаю, как это делается на практике с предварительным и предпродажным событиями и фазой инициализации. Но даже когда я пытаюсь дать опции «admin_code» для моего unmapped свойства $ images. Он всегда говорит, что ему нужен класс администратора. Поскольку класс admin отображается в аннотации @ORM \ OneToMany, я не могу использовать его, иначе доктрина генерирует мне другую таблицу.

Есть ли способ достичь этого? Используется ли параметр admin_code?

Или должен ли я пройти по интерфейсу? (Я полностью предпочитаю фоновый, но я буду делать с тем, что возможно)

ответ

0

ли вы пытаетесь использовать Doctrine inheritance

Я думаю, что вы будете в состоянии создать абстрактный класс File и 3 других классы, которые расширяют Файл:

/** 
* @ORM\Entity 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({"image" = "Image", "document" = "Document", "map" = "Map"}) 
*/ 
abstract class File { 
    ... 
} 

Тогда вам придется создать 3-х классов:

class Image extends File { 
    ... 
} 


class Document extends File { 
    ... 
} 


class Map extends File { 
    ... 
} 

После, вы сможете создать 3 Differents администратора класса для отображения в сонате ,

+0

Hi, Да, я старался, это был хороший вариант, но мое дискриминационное поле является сущностью, поэтому я не могу заставить его работать. Мне было интересно поставить это поле в строку и управлять им в php, но не в сущности, поэтому я могу попробовать дискриминациюField, но мой технический директор пришел сегодня и говорит, что слишком поздно делать 3 объекта ....: '( Но я создал ветку с моим кодом вчера, и я попробую наследовать, как только у меня будет 5 минут для моего личного понимания. А также я заберу этот билет, как только я его заработаю;) Спасибо за ваш ответ. – wadoo