簡體   English   中英

Sonata Media Bundle-如何擴展FormatThumbnail.php

[英]Sonata Media Bundle - How to extend FormatThumbnail.php

Sonata媒體捆綁包在配置中的提供程序上具有縮略圖屬性,您可以在其中指定

sonata.media.thumbnail.format
sonata.media.thumbnail.liip_imagine

這一切都很好,sonata.media.thumbnail.format可以很好地實現我想要實現的所有功能。 我的問題來自這些文件中發生的事情。

在FormatThumbnail.php中,有一個稱為generatePublicUrl的函數,其中它們生成媒體文件的url以及格式化文件的名稱。 他們在名稱或網址中使用媒體ID。 如果您有私有文件,則不是每個人都必須能夠看到此文件,這會導致問題,因為很容易將id操縱為另一個id。

我知道將要提供的公共文件將始終保持公共狀態,因此,如果可以猜測該URL,則用戶將訪問該文件。 由於這個特定的原因,我想嘗試使用該捆綁包使用的唯一引用替換該ID,然后再創建實際的格式化文件,因為更改將不那么容易。

我知道仍然存在泄露數據的風險。

我想改變這個

public function generatePublicUrl(MediaProviderInterface $provider, MediaInterface $media, $format)
{
    if ($format == 'reference') {
        $path = $provider->getReferenceImage($media);
    } else {
        $path = sprintf('%s/thumb_%s_%s.%s', $provider->generatePath($media), $media->getId(), $format, $this->getExtension($media));
    }

    return $path;
}

對此

public function generatePublicUrl(MediaProviderInterface $provider, MediaInterface $media, $format)
{
    if ($format == 'reference') {
        $path = $provider->getReferenceImage($media);
    } else {
        $path = sprintf('%s/thumb_%s_%s.%s', $provider->generatePath($media), $media->getProviderReference(), $format, $this->getExtension($media));
    }

    return $path;
}

如何覆蓋捆綁包僅接收更改的文件?

我已經按照Sonata網站上的步驟進行了操作,該步驟說明了如何使用簡易擴展套件安裝和設置套件。 我有自己的Application \\ Sonata \\ MediaBundle文件夾,該文件夾擴展了原始Sonata \\ MediaBundle。

有關安裝的相關信息,請瀏覽文檔( https://sonata-project.org/bundles/media/master/doc/reference/installation.html

但是我嘗試創建我自己的Thumbnail文件夾並創建新的FormatThumbnail.php,如下所示

<?php

namespace Application\Sonata\MediaBundle\Thumbnail;

use Sonata\MediaBundle\Model\MediaInterface;
use Sonata\MediaBundle\Provider\MediaProviderInterface;
use Sonata\MediaBundle\Thumbnail\FormatThumbnail as BaseFormatThumbnail;

class FormatThumbnail extends BaseFormatThumbnail
{
    /**
     * Overriding this to replace the id with the reference
     *
     * {@inheritdoc}
     */
    public function generatePublicUrl(MediaProviderInterface $provider, MediaInterface $media, $format)
    {
        if ($format == 'reference') {
            $path = $provider->getReferenceImage($media);
        } else {
            $path = sprintf('%s/thumb_%s_%s.%s', $provider->generatePath($media), $media->getProviderReference(), $format, $this->getExtension($media));
        }

        return $path;
    }
}

但是捆綁軟件仍然使用id而不是引用來生成所有內容。 有沒有更具體的方法來實現擴展此文件並覆蓋該功能?

在查看了幾個不同的包並查看了代碼之后,我發現它們實際上具有一個設置為使用Sonata \\ MediaBundle \\ Thumbnail \\ FormatThumbnail的參數。

解決方案是也覆蓋配置中的參數。

#As top level classification in app/config/config.yml
parameters:
    sonata.media.thumbnail.format: Application\Sonata\MediaBundle\Thumbnail\FormatThumbnail

這樣,自定義FormatThumbnail類將注入到將在捆綁包中使用的所有位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM