У меня есть программное обеспечение для управления событиями, построенное на Symfony 4. Я использую Vich Uploader для обработки изображенного события без проблем. Теперь я хочу добавить больше изображений событий, используя связанную сущность EventImage, которая может иметь разные типы изображений (избранные, фон или галерея).
Итак, у сущности EventImage теперь есть связанное событие и imageType:
// EventImage.php
// imageType possible types
const IMAGE_TYPE_FEATURED = 0;
const IMAGE_TYPE_BACKGROUND = 1;
const IMAGE_TYPE_GALLERY = 2;
...
/**
* @ORM\Column(type="string", length=255)
*/
private $image;
/**
* Service image
*
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"image/jpeg", "image/jpeg", "image/png"}
* )
* @Vich\UploadableField(mapping="event_image", fileNameProperty="image")
*
* @var File
*/
private $imageFile;
/**
* @ORM\Column(type="integer")
*/
private $imageType;
...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Event", inversedBy="eventImages")
* @ORM\JoinColumn(nullable=false)
*/
private $event;
...
У сущности My Event теперь также есть коллекция изображений:
//Event.php
/**
* @ORM\OneToMany(targetEntity="App\Entity\EventImage", mappedBy="event", orphanRemoval=true)
*/
private $eventImages;
В форме я ранее без проблем использовал класс VichFileType, поскольку у сущности Event раньше было загружаемое поле.
$builder->add('featuredImage', VichFileType::class, [
'download_uri' => true,
'label' => 'Image',
]
);
Но теперь я хочу обработать все изображения событий для этого события, разделенные Избранным изображением, BackgroundImage и набором изображений Галереи.
Понятия не имею, как этого добиться. Я уже настроил метод getFeaturedImage для объекта Event (а также для других изображений):
public function getFeaturedImage(): EventImage
{
/** @var EventImage $image */
foreach ($this->getEventImages() as $image){
if($image->getImageType() === EventImage::IMAGE_TYPE_FEATURED){
return $image;
}
}
return $image;
}
Но при загрузке формы я получаю эту ошибку:
Класс "App \ Entity \ Event" не может быть загружен. Если вы используете аннотации для настройки VichUploaderBundle, вы, вероятно, просто забыли добавить @Vich\Uploadable
поверх вашей сущности.
Это нормально, так как теперь объект Event не будет содержать изображение, но мне все еще нужно передать событие в форму, чтобы я мог получить доступ к связанным изображениям.
Метод контроллера, который передает информацию:
/**
* @Route("/organizer/event/{id}/design", name="organizer_event_design")
* @IsGranted("MANAGE_EVENTS", subject="event")
* @param int $id
* @param EventRepository $repository
* @param Request $request
* @param EntityManagerInterface $entityManager
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
*/
public function design(Event $event, EventRepository $repository, Request $request, EntityManagerInterface $entityManager)
{
$form = $this->createForm(EventDesignFormType::class, $event);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var User $user */
$user = $this->getUser();
$event->setUpdatedBy($user->getEmail());
$entityManager->persist($event);
$entityManager->flush();
$this->addFlash('success', 'Event Updated!');
return $this->redirectToRoute('organizer_event_edit', [
'id' => $event->getId(),
'tags' => $event->getTags()->toArray()
]);
}
return $this->render('organizer/event_admin/design.html.twig', [
'eventForm' => $form->createView(),
'event' => $event,
]);
}
Я использую совершенно неправильный подход?
Извините за длинный пост и спасибо за помощь!