在使用Symfony和LiipImagineBundle设置AWS S3 / Cloudfront时遇到问题

时间:2017-05-20 09:31:01

标签: symfony amazon-web-services amazon-s3 aws-sdk liipimaginebundle

我正在尝试将AWS S3 / Cloudfront设置为与Symfony中的liipimaginebundle一起使用,但我真的不知道我在做什么。

到目前为止,我已经尝试了以下http://symfony.com/doc/current/bundles/LiipImagineBundle/cache-resolver/aws_s3.html中记录的内容:

已安装aws-sdk-php:

"require": {
    "aws/aws-sdk-php": "^3.28",
}

设置我的参数(使用正确的值而不是这个虚拟数据):

amazon.s3.key:    "your-aws-key"
amazon.s3.secret: "your-aws-secret"
amazon.s3.bucket: "your-bucket.example.com"
amazon.s3.region: "your-bucket-region"

设置一个解析器(虽然我不确定这甚至意味着什么)。 "%amazon.s3.cache_bucket%"位于文档中,但参数不存在,因此我改为使用"%amazon.s3.bucket%"

liip_imagine:
    cache: profile_photos
    resolvers:
        profile_photos:
            aws_s3:
                client_config:
                    credentials:
                        key:    "%amazon.s3.key%"
                        secret: "%amazon.s3.secret%"
                    region: "%amazon.s3.region%"
                bucket: "%amazon.s3.bucket%" 
                get_options:
                    Scheme: https
                put_options:
                    CacheControl: "max-age=86400"

添加以下行以创建服务:

services:
    acme.amazon_s3:
        class: Aws\S3\S3Client
        factory: Aws\S3\S3Client
        arguments:
            -
                credentials: { key: "%amazon.s3.key%", secret: "%amazon.s3.secret%" }
                region: "%amazon.s3.region%"

    acme.imagine.cache.resolver.amazon_s3:
        class: Liip\ImagineBundle\Imagine\Cache\Resolver\AwsS3Resolver
        arguments:
            - "@acme.amazon_s3"
            - "%amazon.s3.bucket%"
        tags:
            - { name: "liip_imagine.cache.resolver", resolver: "amazon_s3" }

我在运行php bin/console server:run

时遇到此错误
  

PHP致命错误:未捕获的Symfony \ Component \ Debug \ Exception \ UndefinedFunctionException:尝试从命名空间“Aws \ S3”调用函数“S3Client”。在/var/www/swing-polls/var/cache/dev/appDevDebugProjectContainer.php:360

我已经尝试过其他六个配置/教程无济于事。如果有人能指出我正确的方向,我会非常感激。

使用Simple S3 Symfony Service提供的代码进行一些调整,我已经能够将我的图像上传到我的s3存储桶,但我只是不知道如何让liipimaginebundle与它们一起工作。< / p>

1 个答案:

答案 0 :(得分:0)

在vendor / liip / imagine-bundle / DependencyInjection / Compiler / ResolversCompilerPass.php中,您可以看到CompilerPass从&#34; resolver&#34;获取值。标签的属性,并使用它来创建一个Reference对象。这意味着解析器应包含服务的ID。

尝试替换

 tags:
        - { name: "liip_imagine.cache.resolver", resolver: "amazon_s3" }

 tags:
        - { name: "liip_imagine.cache.resolver", resolver: "acme.amazon_s3" }