我有一个Symfony 3项目,具有以下内容:

  • vich/uploader-bundle

  • liip/imagine-bundle

  • vich_uploader配置:

db_driver: orm
mappings:
    m_graphics:
        uri_prefix:         '/graphics'
        upload_destination: '%absolute_upload_dir%/graphics'

    m_pictures:
        uri_prefix:         '/pictures'
        upload_destination: '%absolute_upload_dir%/pictures'
  • liip_imagine配置
resolvers :
    default :
        web_path : ~
loaders:
    default:
        filesystem:
            data_root: '%absolute_upload_dir%'

filter_sets :
    cache : ~

    thumbnail:
        animated: true
        quality : 90
        filters :
            thumbnail  : { size : [170, 170], mode : inset }
  • 两个带有“文件”字段的实体
/**
 * @var File|null
 * @Vich\UploadableField(mapping="m_graphics", fileNameProperty="filename")
 */
private $file;

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


and idem with mapping "m_pictures" in another entity
  • 每个实体的FormType,每个实体都做:
public function buildForm(
    FormBuilderInterface $builder,
    array $options) {
    $builder->add('file', VichImageType::class, [
        'label'    => false,
        'required' => false,
        'attr'            => ['class' => 'custom-file-input'],
        'imagine_pattern' => 'thumbnail'
    ])
  • 表单小部件:
{% block vich_image_widget %}
    <div class="vich-image row">
        <div class="col-xs-6 col-md-3">
            {{ form_widget(form.file) }}
            {% if image_uri %}
                <img src="{{ image_uri }}">
            {% endif %}
        </div>
    </div>
{% endblock %}

这个小部件不会生成好的网址:它会错过“图形”或“图片”目录 .

Well, in fact I found why.

挖掘代码,我终于找到了原因 .

这是完全正常的,因为Vich从其存储文件夹(即,相对于该映射的 upload_destination 参数)向Liip提供相对路径的图像 .

这意味着您必须使用相同的值配置 vich_uploader.mappings.*.upload_destinationliip_imagine.loaders.*.filesystem.dataroot .

那你觉得怎么样?是否可以正确实现这样的配置?需要进行哪些代码修改(对Vich,对Liip)以使vich给出正确的liip路径?

对于轶事,我们最终覆盖VichImageType,用"resolveUri"替换"resolvePath" . 并且看起来相反的修改实际上是(合理的)错误修正 . https://github.com/dustin10/VichUploaderBundle/commit/514425c3115024cd680ee02113918b56cb639ad9

但我想要一个更清洁的解决方案 .

欢迎任何想法/讨论 .