Drupal 8プロジェクトにモジュールをセットアップして、AWSを使用して実行する必要があるいくつかのタスクを処理しました。
私はawssdk(PHP用)をcomposer.jsonに追加し、composer updateコマンドを正常に実行しました。AWSSDKは/vendor
フォルダーaws
の下のディレクトリ。
作曲家のエントリー
'aws/aws-sdk-php': '^3.0'
これを自分のカスタムモジュール内にロードすることができないようです。私は1つのコントローラーの上部で次のようにSDKを参照してみました(use
キーワードの後、class
キーワードの前)
require_once (\Drupal::root() . '/vendor/autoload.php');
これを試した結果、Apacheログに次のエラーが表示される空白のページが表示されます。
PHPメッセージ:PHP致命的エラー:require_once():必要なオープンに失敗しました '/home/dash/public_html/docroot/vendor/autoload.php'(include_path = '。:/ usr/share/php ')/home/dash/public_html/docroot/modules/custom/awsintegration/src/Controller/AwsiInstanceListController.phpの9行目
また、絶対パスを使用して試しました
require '/home/dash/public_html/vendor/autoload.php';
結果:ページはウォッチドッグエラーをロードしませんが、SDKクラスの1つを参照しようとするとすぐにApache phpエラーが発生します。
PHPメッセージ:PHP致命的なエラー:クラス 'Drupal\awsintegration\Controller\Aws\Sdk' not found in/home/dash/public_html/docroot/modules/custom/awsintegration/src/Controller/27行目のAwsiInstanceListController.php
[〜#〜]更新[〜#〜]
コメントでのCliveの提案の後、私はrequire呼び出しを削除しました。次に、AWSを使用して認証情報プロバイダーを作成しようとする簡単なコードをいくつか追加しました。Apacheログに、不足しているクラスに関するエラーが表示されます。
PHPの致命的なエラー:21行目の/home/dash/public_html/docroot/modules/custom/awsintegration/src/Controller/AwsiInstanceListController.phpにクラス 'Drupal\awsintegration\Controller\Aws\S3\S3Client'が見つかりません
私のコードは次のとおりです:
namespace Drupal\awsintegration\Controller;
use Drupal\awsintegration\AwsInstances;
use Drupal\Core\Controller\ControllerBase;
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;
class AwsiInstanceListController extends ControllerBase {
public function content() {
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'eu-west-2a',
'credentials' => [
'key' => 'AbAbAbAbDcDcDc',
'secret' => 'QwertyQweRty'
]
]);
return array(
'#type' => 'markup',
'#markup' => $this->t('Hello, World!'),
);
}
}
オートロードにrequire_onceを使用する必要はありません。 composerによって自動的に処理されます。phpファイルにuse
ステートメントを作成する必要があります。
Awsのクラスs3モジュールを使用する場合の例として、
use Aws\S3\SomeClassName;