Путь к изображению EasyAdmin - PullRequest
0 голосов
/ 30 марта 2020

Я не могу понять, как отобразить изображение, загруженное через EasyAdmin. Когда оно загружает изображение, оно отображает абсолютный путь на сервере и сохраняет все это вместе с именем файла в базе данных, поэтому его нельзя использовать для тега html <img>.

How вместо этого я могу сохранить относительный путь к изображению? Или мне нужно применить фильтр к ветке, чтобы отобразить его?

У меня есть форма EasyAdmin с полем:

- { property: 'imageFile', type: 'file_upload', type_options: { upload_dir: '/public/data/gallery/images/', upload_filename: '[uuid]-[timestamp].[extension]'}}

Я использую встроенный загрузчик файлов EasyAdmin, а не отдельный пакет или службу : https://symfony.com/doc/current/bundles/EasyAdminBundle/book/edit-new-configuration.html#file -загрузить

1 Ответ

2 голосов
/ 12 апреля 2020

Это можно исправить с помощью свойства виртуального поля, манипулируя данными перед сохранением / извлечением реального поля.

Это мое определение поля в easy_admin.yaml:

 - { property: 'virtualFilename', type: 'file_upload', type_options: {upload_dir: 'public/imageswerk',upload_filename: '[uuid].[extension]' }}

И Вот как мои сеттеры / геттеры выглядят в Entity:

    /**
     * @var string
     *
     * @ORM\Column(name="filename", type="string", length=80, nullable=false)
     */
    private $filename;

    /**
     * @return string|null
     */
    public function getFilename()
    {
        return $this->filename;
    }

    /**
     * @param string $filename
     */
    public function setFilename(string $filename)
    {
        $this->filename = $filename;
    }

    public function getVirtualFilename()
    {
        //Set path for easyadmin
        return realpath(__DIR__.'/../../public/imageswerk/'.$this->filename);
    }

    public function setVirtualFilename($filename)
    {
        //Only keep last part of filepath
        $this->setFilename(basename($filename));
    }

Я устанавливаю ручной путь в getVirtualFilename, но в идеале вы должны внедрить что-то вроде% project_dir% или что-то другое, чтобы предотвратить жестко закодированные пути нравится.

...