[英]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.