eX1stenZ
@eX1stenZ
Web Dev

Как сохранить изображение в Symfony при использовании 2ух бандлов?

Добрый день, в очередной раз столкнулся с такой вот проблемой:
Разработчик который работал до меня, предпочитал Symfony, а я как таково на нем ничего серъезного не делал, только на Laravel / CodeIgniter, и ориентироваться мне немного сложно (нужно время). В общем стоит Bundle (Sonata Admin Bundle). Изображение подгружается через iPHPBundle (iphp filestore bundle). Пришла следующая задача: прикрутить CROP для вырезки изображения, я нашел бандл (Comur Image Bundle), мне удалось его прикрутить, он загружает изображения, но вот сохранить не удаеться, дело в том что iphp сохраняет все как объект под `serialize()`. А вот Comur как раз сохраняет только название файла. Изменить тип поля не удасться, потому-что через iPHP грузиться и видео и т.п. как объяснили мы через него получаем время видео, размер фото и т.п.

Как сохранить закропленную фотографию через Comur?
protected function configureFormFields(FormMapper $formMapper)
        {
            $em                    = $this->getModelManager()->getEntityManager($this->getSubject());
            $searchTagsTransformer = new SearchTagsToStringTransformer($em);
            $formMapper
                ->add('title',...
                //->add('imageFile', 'iphp_file', array('required' => false, 'label' => 'Изображение'))
                ->add('imageFile', 'comur_image', array(
                    'uploadConfig' => array(
                        'uploadRoute' => 'comur_api_upload',        //optional
                        'uploadUrl' => $this->getRoot()->getSubject()->getUploadRootDir(),       // required - see explanation below (you can also put just a dir path)
                        'webDir' => $this->getRoot()->getSubject()->getUploadDir(),              // required - see explanation below (you can also put just a dir path)
                        'fileExt' => '*.jpg;*.gif;*.png;*.jpeg',    //optional
                        'libraryDir' => null,                       //optional
                        'libraryRoute' => 'comur_api_image_library', //optional
                        'showLibrary' => true,                      //optional
                        'saveOriginal' => 'originalImage'           //optional
                    ),
                    'cropConfig' => array(
                        'minWidth' => 588,
                        'minHeight' => 300,
                        'aspectRatio' => true,              //optional
                        'cropRoute' => 'comur_api_crop',    //optional
                        'forceResize' => false,             //optional
                        'thumbs' => array(                  //optional
                            array(
                                'maxWidth' => 180,
                                'maxHeight' => 400,
                                'useAsFieldImage' => true  //optional
                            )
                        )
                    ),
                    'required' => false, 'label' => 'Изображение'
                ))
                ->add('...
    }

Вот тут при сохранении происходит следущее:
Comur возвращает массив

[imageFile] => cropped/123.jpg
[originalFile] => 123.jpg
При сохранении ругается доктрина что ей нужен "string" а не массив, и как правильно этот "string" должен храниться как "serialize" того самого iPHP.

/**
    	 * @ORM\Column(type="array", nullable=true)
    	 * @FileStore\UploadableField(mapping = "publication_preview_image")
    	 * @Assert\Image(mimeTypesMessage="Загружаемый формат изображения не поддерживается")
    	 */
    	protected $imageFile;
    
    	/**
    	 * @ORM\Column(type="array", nullable=true)
    	 * @FileStore\UploadableField(mapping = "publication_preview_image")
    	 */
    	protected $originalImage;

Я надеюсь что найдеться хоть кто-нибудь кто поможет решить эту проблему :(
  • Вопрос задан
  • 838 просмотров
Пригласить эксперта
Ответы на вопрос 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Я бы хранил кропленные картинки прямо бандлом ComurImageBundle, без iPHP. ComurImageBundle сам сохранит оригинальный файл (если надо, можно выключить) и обрезанный файл в указанную папку, причём сохранит сам через ajax, ещё до сохранения формы, и в сонату придёт уже готовая строка с уже готовым файлом (обрезанным и оригинальным).
Убирайте из полей сущности атрибуты, связанные с iPHP и делайте их string вместо array. То есть, делайте прямо как описано в документации бандла ComurImageBundle. А если вам ещё нужно что-то делать ещё и с iPHP, то дополнительно делайте новые поля для iPHP, и сами вручную сохраняйте нужные данные для них в prePersist, как вам советует Денис
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы