Если вы не хотите, чтобы файл (только тип файла) был переименован во время загрузки сонатой и сохранил его первоначальное имя, вам необходимо переопределить класс сонаты (сонаты) FileProvider
, когда вы устанавливаете Sonata's Media Bundle
, чтобы иметь возможность иметь ребенка путём создания пакета easy extend
по умолчанию он генерирует расширенный комплект в src\Application
, но вы можете выбрать свое собственное местоположение, как только у вас есть его расширенный пакет, который находится в src\Application\Sonata\MediaBundle
, вы можете переопределить параметр класса (), указав в своей конфигурации файл (yml, xml и т. д.)
parameters:
sonata.media.provider.file.class: Application\Sonata\MediaBundle\Provider\FileProvider
И теперь exte й вашего FileProvider
класса с FileProvider
так, чтобы другими функциональной сонатой будет работать как
namespace Application\Sonata\MediaBundle\Provider;
//... other uses classes
use Sonata\MediaBundle\Provider\FileProvider as BaseProvider ;
class FileProvider extends BaseProvider
{
public function __construct($name, Filesystem $filesystem, CDNInterface $cdn, GeneratorInterface $pathGenerator, ThumbnailInterface $thumbnail, array $allowedExtensions = array(), array $allowedMimeTypes = array(), MetadataBuilderInterface $metadata = null)
{
parent::__construct($name, $filesystem, $cdn, $pathGenerator, $thumbnail);
$this->allowedExtensions = $allowedExtensions;
$this->allowedMimeTypes = $allowedMimeTypes;
$this->metadata = $metadata;
}
protected function generateReferenceName(MediaInterface $media)
{
return $media->getName();
/** return $this->generateMediaUniqId($media).'.'.$media->getBinaryContent()->guessExtension();*/
}
}
В сонатах наборов выше класса имени файл в providerReference
по телефону generateReferenceName()
в этой функции его генерирует уникальное имя для каждого файла, используя sha1
что-то вроде sha1($media->getName().uniqid().rand(11111, 99999))
так, чтобы иметь оригинальное название для загруженного файла просто вернуть $media->getName()
в этой функции и ваш загруженный файл будет иметь такое же имя
Если делать это, я хотел бы предложить добавить метку времени или, по крайней мере рандов (11111, 99999) на имя файла, потому что файл может быть перезаписан, если загружен другой файл с тем же именем. – kunicmarko20