Symfony 4: загрузка нескольких изображений с функциями предварительного просмотра и добавления / удаления

вступление

Я работаю над приложением Symfony 4, которое позволяет пользователям создавать и редактировать сообщения, связанные с одним или несколькими изображениями. Данные хранятся в базе данных через Doctrine. Каждый пост имеет связанные объекты PostImage, которые содержат имена файлов реальных файлов изображений.

Сущность сообщения:

/**
 * @ORM\Entity
 */
class Post
{
    ...

    /**
     * @ORM\OneToMany(targetEntity = "PostImage", mappedBy = "post", cascade = {"persist", "remove"}, orphanRemoval=true)
     */
    private $images;

   ...

Сущность PostImage:

/**
 * @ORM\Entity
 */
class PostImage
{

    ...
    /**
    * @ORM\ManyToOne(targetEntity = "Post")
    */
    private $post;

    /**
     * @ORM\Column(type = "string", length=512)
     */
    private $filename;

    ...

Что я пытаюсь сделать

Хорошее описание базовой загрузки файла в базу данных - здесь. Однако я бы хотел сделать загрузку изображений и предварительный просмотр более динамичными.

Пользователь должен уметь:

  • Загрузите одно / несколько изображений и просмотрите их
  • Загрузите больше изображений
  • Удалите некоторые изображения
  • Невозможно отправить форму, если все изображения удалены
  • Отредактируйте сообщение (т. Е. Выполните указанные выше действия) в позже, используя ту же форму

Где я борюсь

Для меня совершенно ясно, как манипулировать JavaScript / DOM. Я борюсь с тем, как создавать формы или изменять типы на стороне Symfony. Поле "$ images" сущности Post представляет собой коллекцию, а способ использования форм с коллекциями в Symfony описан здесь. Но я изо всех сил пытаюсь понять, как изменить эту логику для работы с файлами.

Если я использую несопоставленный элемент управления FileType и загружаю файлы при изменении через AJAX, как мне сохранять и отправлять ссылки, которые представляют текущий список изображений (некоторые могут быть новыми, некоторые - старыми, некоторые - удаленными)? Использовать элемент управления CollectionType с дочерними элементами HiddenType, которые содержат ссылки на файлы, загруженные на сервер?

class PostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('images', CollectionType::class, array(
                'allow_add' => true,
                'allow_remove' => true,
                'by_reference' => false,
                'entry_type' => HiddenType::class
                ))
            ->add('add_images', FileType::class, array(
                'label' => 'Add images',
                'mapped' => false,
                'multiple' => true
                ))
            ->add( //other fields..
            ...
     }
}

Ваше сообщение помогло мне решить аналогичную проблему. Спасибо!

Maxim Mandrik 21.12.2020 11:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
564
0

Другие вопросы по теме