Я пытаюсь интегрировать Sonata Media Bundle в свой проект. Проблема в том, что я не понимаю, как работает пакет.
В «приложении» он создал класс Media, Gallery и GalleryHasMedia. Для чего они? Как я могу добавить поле изображений и поле видео в свой пользовательский объект? (как множественное число)
С уважением, нова
Медиа – это объект, который сохраняет все свойства вашего видео / изображения: ширина / высота / путь к файлу …
Галерея Entity Gallery полезна, если вы хотите связать несколько медиа вместе (галерея видео / изображений по одному и тому же вопросу).
Галерея Entity GalleryHasMedia – это Entity, которая связывает галерею и медиа.
SonataMedia устанавливается в приложении Bundle, поэтому вы можете легко расширять и изменять код в соответствии с вашими потребностями.
Если вы хотите добавить Media или Gallery для пользователя, который вам просто нужно сделать:
class UserEntity { /** * @var Media * * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="picture", referencedColumnName="id") * }) */ private $picture; /** * @var Gallery * * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="gallery", referencedColumnName="id") * }) */ private $gallery; }
Восстановите свой приемник и сеттеры с помощью консоли:
php app/console doctrine:generate:entities TestBundle:User
И вы настроены на использование SonataMedia в вашем User Entity.
ОБНОВИТЬ
Если вы хотите управлять несколькими изображениями для пользователя, вам нужно сделать следующее:
UserEntity
class UserEntity { /** * @var Media * * @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="images", referencedColumnName="id") * }) */ private $images; }
Application \ соната \ MediaBundle \ Entity \ Media
class Media { /** * @var User * * @ORM\ManyToOne(targetEntity="UserEntity", inversedBy="images") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="user", referencedColumnName="id") * }) */ private $user; }
UserAdmin
class UserAdmin { public function configureFormFields(FormMapper $formMapper) { $formMapper->add('images', 'sonata_type_collection', array(), array( 'edit' => 'inline', 'inline' => 'table', 'link_parameters' => array( 'context' => 'images', 'provider' => 'sonata.media.provider.image' ) )) } }
Вы можете изменить отображение, изменив свойства редактирования и встроенных свойств. Link_parameters задает свойства мандатов для формы: контекст и поставщик
ОБНОВЛЕНИЕ 2
вопрос 2
Если вы хотите несколько галерей для пользователя, вам просто нужно выполнить тот же процесс, который я объяснил в своем предыдущем обновлении, единственное различие заключается в том, что вы должны создать новое свойство, например: private $ imageGalleries с галереей targetEntity, добавить inversedBy в Gallery Entity of Sonata и добавьте в свой класс SonataAdmin новое свойство, только изменив изображения имен полей на imageGalleries.
Вопрос 3
Вне сонаты вы должны использовать форму sonata_media_type для обработки носителя. http://sonata-project.org/bundles/media/2-0/doc/reference/form.html Поскольку у вас есть отношения oneToMany, это будет коллекция sonata_media_type.
Я не знаю, как обращаться с галереями.
Из документации:
"Заметка
Команда будет генерировать объекты домена в пространстве имен приложений. Таким образом, вы можете указать ассоциации объектов в глобальное и общее пространство имен. Это упростит обмен объектами, поскольку ваши модели позволят указать на глобальное пространство имен. Например, медиа будет Application \ Sonata \ MediaBundle \ Entity \ Media. "http://sonata-project.org/bundles/media/2-2/doc/reference/installation.html
Довольно много того, что вы получаете, когда вы используете пакет easy-extands.
Вы используете их точно так же, как и любую сущность, просто из другого пространства имен в ваши существующие сущности.
Что касается использования их в другом типе формы, просто вставьте тип медиа-формы в свой тип пользовательской формы: http://sonata-project.org/bundles/media/2-2/doc/reference/form.html
Чтобы добавить поля к другому объекту, вы просто добавляете свойство с помощью геттеров и сеттеров и (мы всегда используем аннотации доктрины, а не yaml) добавляем аннотацию для медиа-объекта в качестве целевого объекта с именем столбца для типа отношения (1: 1 , 1: M, M: M и т. Д.) Обычным способом symfony.