Symfony3-Liip的多个Vich映射:错误的链接

时间:2018-07-17 17:51:01

标签: symfony vichuploaderbundle liipimaginebundle

我有一个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 %}
    

此小部件无法生成正确的网址:它缺少“图形”或“图片”目录。

好吧,事实上我找到了原因。

翻阅代码,我终于找到了原因。

这是完全正常的,因为Vich从存储文件夹(即,相对于此映射的upload_destination参数而言)为Liip提供了相对路径。< / p>

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

那么,您对此有何看法?是否可以正确实现这样的配置? (对Vich,对Liip)需要进行哪些代码修改才能使vich给出正确的liip路径?

对于轶事,我们最终重写VichImageType,将“ resolvePath”替换为“ resolveUri”。似乎相反的修改实际上是(合理的)错误更正。 https://github.com/dustin10/VichUploaderBundle/commit/514425c3115024cd680ee02113918b56cb639ad9

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

欢迎任何想法/讨论。

0 个答案:

没有答案