Media является объект, который сохраняет все свойства вашего видео/изображения: ширина/высота/путь к файлу ...
Платформа Entity Gallery полезно, если вы хотите связать несколько носителей вместе (галерея видео/фотографии об одном и том же предмете).
Сущность GalleryHasMedia - это объект, который связывает галерею и медиа.
SonataMedia установлен в приложении Bundle, поэтому вы можете легко и легко расширять и изменять код в соответствии с вашими потребностями.
Если вы хотите добавить медиа или галерею для пользователей, вы просто должны сделать:
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 в вашем пользователе.
UPDATE
Если вы хотите управлять несколько изображений для пользователя, вы должны сделать:
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 \ СМИ
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 задает свойства доверенными для формы: context and provider
UPDATE 2
Вопрос 2
Если вам нужно несколько галерей для пользователя, вам просто нужно сделать тот же процесс, который я объяснил в своем предыдущем обновлении, единственное различие заключается в том, что вы должны создать новое свойство, например: private $ imageGalleries с галереей targetEntity, добавить inversedBy в галерее Entity of Sonata и добавьте в свой класс SonataAdmin новое свойство, только изменив изображения имен полей на imageGalleries.
Вопрос 3
Вне Sonata, вы должны использовать форму sonata_media_type для обработки мультимедиа. http://sonata-project.org/bundles/media/2-0/doc/reference/form.html Поскольку у вас есть отношения oneToMany, это будет коллекция sonata_media_type.
Существует нет формы для обработки Галереи, которые я знаю.
Я не понимаю ваших сопоставлений. Сначала вы говорите: «У многих пользователей есть одно изображение», но я хотел, чтобы «у одного пользователя было много изображений». А для галереи сопоставление вашего кода будет означать «Одна галерея для многих пользователей», но я думаю, что «Многие галереи одному пользователю» будут иметь больше смысла. Я понимаю, когда я делаю отношение ManyToOne, потому что мне нужна только аннотация в одном классе. Но что, когда у меня есть OneToMany? Там мне нужны аннотации в обоих классах ..? Можете ли вы уточнить свой ответ для отношения OneToMany, пожалуйста :) –
Я имею в виду, что у одного пользователя должно быть больше галерей, потому что у пользователя должна быть галерея изображений, галерея видео и т. Д. галерея документов. Или я создаю поэтому разные поля, которые я сопоставляю с медиа-объектом? Как это делается? –
Вы должны создать 3 разных свойства, используя галерею объектов или носители с типом OnetoMany. Выбор между Gallery и Media зависит от вашего проекта, если Medias независимы или нет. Удачи ! – HypeR