Сулу: Есть ли способ программно создавать изображения?

Есть ли способ в Sulu CMS программно создать объект изображения без загрузки фактического изображения через интерфейс администратора?

Вариант использования заключается в том, что я хотел бы отобразить резервное изображение с измененным размером, если пользователь не загружает изображение заголовка.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
179
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать сервис 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 и в доктрине entityManager doctrine.orm.entity_manager.

Ответ принят как подходящий

В конце концов мы сделали это, используя прокси изображения (большой палец в нашем случае). Это освобождает нас от ограничений формата изображения sulu и позволяет нам генерировать точно масштабированные / обрезанные версии файла, которые нам нужны — все на основе исходного URL-адреса изображения, который использовался для загрузки.

Другие вопросы по теме