web-dev-qa-db-ja.com

composer.jsonを介して追加されたサードパーティライブラリですが、モジュールにロードするにはどうすればよいですか?

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!'),
        );
    }

}
2
John Cogan

オートロードにrequire_onceを使用する必要はありません。 composerによって自動的に処理されます。phpファイルにuseステートメントを作成する必要があります。

Awsのクラスs3モジュールを使用する場合の例として、

use Aws\S3\SomeClassName;
1
i am batman