Gaufrette и Symfony 2: Файловая система не определена для «изображений» домен

Я использую Symfony3 с KnpGaufretteBundle подключиться к корзине Amazon S3 с помощью метода AWS S3, описанного в их Github Readme

aws_s3_adapter:
key:        "%aws_key%"secret_key: "%aws_secret%"region:     "%aws_region%"
knp_gaufrette:
adapters:
images:
aws_s3:
service_id: 'aws_s3_adapter.client'
bucket_name: '%aws_bucket%'
options:
directory: 'images'
filesystems:
images:
adapter: images
alias:   images_fs

У меня также определен сервис, который я хочу использовать для управления этой файловой системой (и другими).

Определение:

services:
test.image_manager:
class: TestBundle\Filesystem\FileManager
arguments:
filesystem: "@images_fs"filesystem_name: "images"mimetypes: ["image/jpeg", "image/png", "image/gif"]

Учебный класс:

<?php

namespace TestBundle\Filesystem;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\BinaryFileResponse;

use Gaufrette\Filesystem;
use Gaufrette\StreamWrapper;

class FileManager
{
private $allowedMimeTypes;

private $filesystem;

private $filsystem_name;

public function __construct(Filesystem $filesystem, $filesystem_name, $mimetypes = array())
{
$this->filesystem = $filesystem;
$this->filesystem_name = $filesystem_name;
$this->allowedMimeTypes = $mimetypes;
}

public function upload(UploadedFile $file, $filename)
{
// Check if the file's mime type is in the list of allowed mime types.
if (!in_array($file->getClientMimeType(), $this->allowedMimeTypes)) {
throw new \InvalidArgumentException(sprintf('Files of type %s are not allowed.', $file->getClientMimeType()));
}

$adapter = $this->filesystem->getAdapter();
$adapter->setMetadata($filename, array('contentType' => $file->getClientMimeType()));
return $adapter->write($filename, file_get_contents($file->getPathname()));
}

public function fetch( $filename )
{
if( ! $this->filesystem->has( $filename ) )
{
return false;
}/* -- PROBLEM -- */

StreamWrapper::register();
return new BinaryFileResponse( "gaufrette://{$this->filesystem_name}/{$filename}" );

/* -- PROBLEM -- */

}

public function delete( $filename )
{
if( ! $this->filesystem->has( $filename ) )
{
return false;
}
return $this->filesystem->delete( $filename );
}
}

Я могу успешно загрузить в корзину, используя функцию загрузки, сообщая мне, что файловая система существует и работает должным образом.

Однако я не могу использовать Gaufrette \ StreamWrapper для обслуживания файла, используя BinaryFileResponse, как он говорит, что я должен делать. Вместо этого он дает мне ошибку, которую я вставил в заголовок: There is no filesystem defined for the "images" domain.

Файловая система определенно существует, так как я использую ее для загрузки изображений. Любые подсказки относительно того, в чем может быть проблема, которая мешает мне использовать эту файловую систему, были бы очень полезны. Насколько я знаю, документация по Gaufrette очень редкая, но я собираюсь продолжать копать.

0

Решение

Смотря на MainConfiguration.php показал, что есть steam_wrapper вариант в комплектации для комплектации. Я добавил это в свой config.yml под которой файловые системы определены так:

knp_gaufrette:
adapters:
images:
aws_s3:
service_id: 'aws_s3_adapter.client'
bucket_name: '%aws_bucket%'
options:
directory: 'images'
.
.
.
filesystems:
images:
adapter: images
alias:   images_fs
.
.
.
stream_wrapper:
filesystems: [ images, ... ]

и приведенный выше код теперь работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]