我尝试将此PHP框架https://github.com/panique/mini与Amazon S3:s配置文件与服务构建器http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#using-a-configuration-file-with-the-service-builder
集成如果我能将它与现有的config.php https://github.com/panique/mini/blob/master/application/config/config.php集成,那将是最好的,但我不知道该如何处理这一行。
$aws = Aws::factory('/path/to/custom/config.php');
因为我已经在代码的另一部分中包含了config.php
这是我尝试的但不知道为什么它不起作用
在文件夹config中创建了一个新文件aws-config.php,并将其包含在我的项目中。 aws-config.php具有以下代码(使用正确的密钥)。
return array(
// Bootstrap the configuration file with AWS specific features
'includes' => array('_aws'),
'services' => array(
// All AWS clients extend from 'default_settings'. Here we are
// overriding 'default_settings' with our default credentials and
// providing a default region setting.
'default_settings' => array(
'params' => array(
array(
'credentials' => array(
'key' => 'YOUR_AWS_ACCESS_KEY_ID',
'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
)
),
'region' => 'us-west-1'
)
)
)
);
我想在我的控制器中访问我的凭据,如下所示:https://github.com/panique/mini/blob/master/application/controller/songs.php
我已从文档
中实现了这一点<?php
use Aws\S3\S3Client;
use Aws\Common\Aws;
// Create the AWS service builder, providing the path to the config file
$aws = Aws::factory(APP . 'config/aws-config.php');
$client = $aws->get('s3');
class Album extends Controller
{
public function index()
{
foreach ($images as &$image) {
$image->imageThumbnailUrl = $client->getObjectUrl($resizedBucket, 'resized-'.$image->image_name, '+10 minutes');
}
...
...
我收到错误消息
注意:未定义的变量:致命错误的客户端:呼叫成员 函数getObjectUrl()在
中的非对象上
我在循环中使用$ client和getObjectUrl。
如果我使用&#34;将凭据传递到客户端工厂方法&#34;我的代码工作正常。我的控制器中的索引方法中的http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#passing-credentials-into-a-client-factory-method。
答案 0 :(得分:0)
此处的问题与AWS SDK或panique / mini框架无关。您不能在类定义之外声明变量,并期望能够在类定义中使用它们。这就是变量作用域在PHP中的工作原理。您需要以某种方式将s3Client对象传递给Controller,或者在控制器内实例化它。
你可以逐字地将这些行移动到你的索引方法中,它应该可以工作。
// Create the AWS service builder, providing the path to the config file
$aws = Aws::factory(APP . 'config/aws-config.php');
$client = $aws->get('s3');