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

Intro

Я работаю над приложением 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;

    ...

Кто япытается сделать

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

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

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

Где я борюсь

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..
            ...
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...