composerを使用してモジュールのベンダーディレクトリから依存関係をロードする


7

drupalモジュールの依存関係を管理するためにcomposerを使用しています。モジュールのルートディレクトリにあるcomposer.jsonファイルで依存関係を指定しました。composer installコマンドを実行すると、すべての依存関係が正しくインストールされます。ただし、オートローディングは機能していないようです。

私はここで問題に対処するいくつかのスレッドをチェックしましたが、drupal.orgのモジュールのページではバージョン8.1以降のDrupalのcomposerの使用の改善により非推奨であるにもかかわらず、それらのほとんどが利用可能なcomposer managerモジュールの使用を提案していることがわかりました

これが私のモジュールのルートディレクトリにあるcomposer.jsonファイルです。

{
"name": "activit/facebook_ratings",
"description": "Display a feed of your Facebook fanpage's ratings on your website.",
"type": "drupal-module",
"require": {
    "facebook/graph-sdk": "^5.4"
},
"license": "MIT",
"authors": [
    {
        "name": "Robert Balasko",
        "email": "rbalasko@activit.sk"
    }
]
}

そして、srcディレクトリのルートにある、graph-sdkからクラスをロードしようとするファクトリクラス。

<?php namespace Drupal\facebook_ratings;


use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Facebook\Facebook;

class FacebookConnectorFactory {

  private $logger_factory;

  public function __construct(LoggerChannelFactoryInterface $logger_factory) {
    $this->logger_factory = $logger_factory;
  }

  public function getFacebookService($app_id, $app_secret) {
    if (!$app_id || !$app_secret) {
      $this->logger_factory
        ->get('facebook_ratings')
        ->error('Undefined App ID or App secret');

      return FALSE;
    }

    return new Facebook([
      'app_id' => $app_id,
      'app_secret' => $app_secret,
      'default_graph_version' => 'v2.6',
    ]);
  }

}

その結果class not found、コードを実行するとエラーが発生します。依存関係をオートロードする必要はありませんか、それとも何か問題がありますか?

どうもありがとう。

回答:


7

Composer Managerは、現在コアにあるMergeプラグインの小さなラッパーです。

composer.jsonプロジェクトのルートにモジュールを登録し、extra> merge-plugin> includeを探します。次のようになります。

"extra": {
    "_readme": [
        "By default Drupal loads the autoloader from ./vendor/autoload.php.",
        "To change the autoloader you can edit ./autoload.php."
    ],
    "merge-plugin": {
        "include": [
            "core/composer.json",
            "modules/facebook_ratings/composer.json"
        ],
        "recurse": false,
        "replace": false,
        "merge-extra": false
    }
}

modules/facebook_ratings/composer.jsonはへのパスcomposer.jsonです。それはあなたのモジュールがある場所に依存します。

composer installその後実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.