将亚马逊AWS SDK的Use语句放在Codeigniter 3中的何处



我正在尝试将适用于PHP的Amazon AWS SDK集成到我的Codeigniter 3应用程序中。我正在从Composer加载SDK。问题是我不知道该把use语句放在哪里。

如果我把它们放在这里:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
use AwsS3S3Client;
use AwsExceptionAwsException;
class S3_model extends CI_Model {
public function __construct()
{
parent::__construct();
//Create a S3Client
$s3 = new AwsS3S3Client([
'profile' => 'default',
'version' => 'latest',
'region' => 'eu-west-1'
]);

找不到类"Aws\S3\S3Client"。

我已经自动加载了Composer:

$config['composer_autoload'] = TRUE;

这是我的autoload.php文件的内容:

/*
| -------------------------------------------------------------------
|  Auto-load Packages
| -------------------------------------------------------------------
| Prototype:
|
|  $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
$autoload['packages'] = array();
/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in system/libraries/ or your
| application/libraries/ directory, with the addition of the
| 'database' library, which is somewhat of a special case.
|
| Prototype:
|
|   $autoload['libraries'] = array('database', 'email', 'session');
|
| You can also supply an alternative library name to be assigned
| in the controller:
|
|   $autoload['libraries'] = array('user_agent' => 'ua');
*/
$autoload['libraries'] = array('database', 'smartie' => 'smarty', 'session');
/*
| -------------------------------------------------------------------
|  Auto-load Drivers
| -------------------------------------------------------------------
| These classes are located in system/libraries/ or in your
| application/libraries/ directory, but are also placed inside their
| own subdirectory and they extend the CI_Driver_Library class. They
| offer multiple interchangeable driver options.
|
| Prototype:
|
|   $autoload['drivers'] = array('cache');
|
| You can also supply an alternative property name to be assigned in
| the controller:
|
|   $autoload['drivers'] = array('cache' => 'cch');
|
*/
$autoload['drivers'] = array();
/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url','utility','postrecycler');
/*
| -------------------------------------------------------------------
|  Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files.  Otherwise, leave it blank.
|
*/
$autoload['config'] = array();
/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file.  For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();
/*
| -------------------------------------------------------------------
|  Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|
|   $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();

这是我的composer.json

{
"description": "The CodeIgniter framework",
"name": "codeigniter/framework",
"type": "project",
"homepage": "https://codeigniter.com",
"license": "MIT",
"support": {
"forum": "http://forum.codeigniter.com/",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.3.7",
"jublonet/codebird-php": "3.1",
"phpmailer/phpmailer": "^6.0",
"dg/rss-php": "^1.3",
"tpyo/amazon-s3-php-class": "^0.5.1",
"filp/whoops": "^2.4",
"stripe/stripe-php": "^7.3",
"aws/aws-sdk-php": "^3.133"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
},
"require-dev": {
"mikey179/vfsstream": "1.1.*",
"phpunit/phpunit": "4.* || 5.*"
}
}

如果我把它们放在类的顶部,我会找不到Trait‘Aws\S3\S3Client’。

我不知道还能去哪里!还有其他人成功了吗?

最后,我通过如下更改使代码正常工作:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class S3_model extends CI_Model {
private $s3;
public function __construct()
{
parent::__construct();
//Create a S3Client
$this->s3 = new AwsS3S3Client([
'version' => 'latest',
'region' => 'eu-west-1'
]);

将供应商放入库中,并使用以下源代码制作库文件

include("vendor/autoload.php");
//require 'vendor/aws/aws.phar';
use AwsS3S3Client;
class S3
{
private $S3;
public function __construct()
{
$ci = &get_instance();
$this->S3 = S3Client::factory($ci->config->item("aws_credentials"));
}
public function listBuckets()
{
$result = $this->S3->listBuckets();
return $result;
}

并在控制器中放入require函数和使用所有lib函数

注意:在config文件夹中有一个文件s3.php,它的s3configartion文件位于其中,这将放入密钥和bucket区域。

您应该要求自动加载使用供应商文件的文件

$config['composer_autoload'] = TRUE;
require_once APPPATH.'vendor/autoload.php';

参考此链接参考链接

最新更新