Я пытаюсь интегрировать Sonata Media Bundle в свой проект.
Проблема в том, что я не понимаю, как работает комплект.
Он создал класс Media, Gallery и GalleryHasMedia в «Приложении». Для чего они? Как теперь я могу добавить поле изображений и видео в мою учетную запись? (оба во множественном числе)
С Уважением,
новая звезда
Средства массовой информации это сущность, которая сохраняет все свойства вашего видео / изображения: ширина / высота / путь к файлу …
Лицо Галерея полезно, если вы хотите связать несколько медиа вместе (галерея видео / изображений на одну и ту же тему).
Лицо 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.
Там нет формы для обработки галерей, которые я знаю.
Из документации:
«Заметка
Команда сгенерирует доменные объекты в пространстве имен приложения. Таким образом, вы можете указать ассоциации сущностей в общем и общем пространстве имен. Это облегчит совместное использование сущностей, поскольку ваши модели позволят указывать на глобальное пространство имен. Например, носитель будет 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.