Sulu:有没有一种方法可以通过程序创建图像

时间:2019-06-11 01:32:08

标签: sulu

Sulu CMS中是否可以通过编程方式创建图像对象而无需通过管理界面上传实际图像?

用例是,如果用户不上传标题图像,我想显示一个调整大小的后备图像。

2 个答案:

答案 0 :(得分:0)

您可以使用sulu_media.media_manager服务,并为其提供一个新的UploadedFile实例,例如:

$mediaManager->save(
    new UploadedFile($path, $fileName, $mimeType),
    [
        'title' => 'Test',
        'locale' => 'de',
        'description' => '',
        'collection' => $collectionId,
        // ...
    ]
);

如果性能很重要,或者您需要导入许多文件,则应该自己创建实体(媒体,文件,fileVersion,fileVersionMeta),并使用sulu.media.storage服务保存实际文件,该文件将为您返回storageOptions,例如:


$media = new \Media();
$file = new File();
$file->setVersion(1);
$file->setMedia($media);
$media->addFile($file);

$mediaType = $this->entityManager->getReference(
    MediaType::class, $this->mediaTypeManager->getMediaType($this->getMimeType($uploadedFile))
);
$media->setType($mediaType);

$collection = $this->entityManager->getReference(Collection::class, $collectionid);)
$media->setCollection($collection);

$storageOptions = $this->mediaStorage->save($file->getPathname(), $fileName)
$fileVersion = new FileVersion();
$fileVersion->setVersion($file->getVersion());
$fileVersion->setSize($uploadedFile->getSize());
$fileVersion->setName($fileName);
$fileVersion->setStorageOptions($storageOptions);
$fileVersion->setMimeType(/* ... */);
$fileVersion->setFile($file);
$file->addFileVersion($fileVersion);
$fileVersionMeta = new FileVersionMeta();
$fileVersionMeta->setTitle($title);
$fileVersionMeta->setDescription('');
$fileVersionMeta->setLocale($locale);
$fileVersionMeta->setFileVersion($fileVersion);
$fileVersion->addMeta($fileVersionMeta);
$fileVersion->setDefaultMeta($fileVersionMeta);

$this->entityManager->persist($fileVersionMeta);
$this->entityManager->persist($fileVersion);
$this->entityManager->persist($file);
$this->entityManager->persist($media);

// after importing the files or after every 100 files you should flush the entitymanager
$this->entityManager->flush();
// I also recommend in a import doing a clear to keep the entitymanager unitofwork small as possible
$this->entityManager->clear();

可以在sulu_media.type_manager下使用媒体类型管理器,而在实体管理器doctrine.orm.entity_manager下可以使用媒体管理器

答案 1 :(得分:0)

最后,我们通过使用图像代理(在本例中为Thumbor)做到了这一点。这使我们摆脱了sulu的图像格式限制,使我们能够准确生成我们需要的文件的缩放比例/裁剪后的版本-全部基于已用于上传的原始图像url。