Symfony Sonata Media Bundle добавляет изображения / видео пользователю

Я пытаюсь интегрировать Sonata Media Bundle в свой проект.
Проблема в том, что я не понимаю, как работает комплект.

Он создал класс Media, Gallery и GalleryHasMedia в «Приложении». Для чего они? Как теперь я могу добавить поле изображений и видео в мою учетную запись? (оба во множественном числе)

С Уважением,
новая звезда

6

Решение

Средства массовой информации это сущность, которая сохраняет все свойства вашего видео / изображения: ширина / высота / путь к файлу …

Лицо Галерея полезно, если вы хотите связать несколько медиа вместе (галерея видео / изображений на одну и ту же тему).

Лицо GalleryHasMedia это сущность, которая связывает галерею и медиа.

SonataMedia устанавливается в пакетном приложении, поэтому вы можете легко расширять и изменять код в соответствии с вашими потребностями.

Если вы хотите добавить мультимедиа или галерею для пользователя, вам просто нужно сделать:

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 в вашей пользовательской сущности.

ОБНОВИТЬ

Если вы хотите управлять несколькими изображениями для пользователя, вы должны сделать:

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'
)
))
}
}

Вы можете изменить отображение, изменив свойства edit и inline, link_parameters устанавливает свойства мандатории для формы: контекст и поставщик

ОБНОВЛЕНИЕ 2

вопрос 2

Если вам нужно несколько галерей для пользователя, вам просто нужно выполнить тот же процесс, который я объяснил в моем предыдущем обновлении, с той лишь разницей, что вы должны создать новое свойство, например: private $ imageGalleries с targetEntity Gallery, добавить inversedBy в объект галереи Sonata и добавьте в свой класс SonataAdmin новое свойство, изменив только имена полей изображений на imageGalleries.

Вопрос 3

За пределами Sonata вы должны использовать форму sonata_media_type для обработки Media.
http://sonata-project.org/bundles/media/2-0/doc/reference/form.html
Поскольку у вас есть отношения oneToMany, это будет коллекция sonata_media_type.

Там нет формы для обработки галерей, которые я знаю.

19

Другие решения

Из документации:

«Заметка

Команда сгенерирует доменные объекты в пространстве имен приложения. Таким образом, вы можете указать ассоциации сущностей в общем и общем пространстве имен. Это облегчит совместное использование сущностей, поскольку ваши модели позволят указывать на глобальное пространство имен. Например, носитель будет 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.

0

По вопросам рекламы [email protected]