Laden von Abhängigkeiten aus dem Herstellerverzeichnis in ein Modul mit Composer

7

Ich verwende Composer zum Verwalten von Abhängigkeiten in meinem Drupal-Modul. Ich habe meine Abhängigkeit in der Datei composer.json angegeben, die sich im Stammverzeichnis meines Moduls befindet. Nach dem Ausführen des composer installBefehls werden alle Abhängigkeiten korrekt installiert. Das automatische Laden scheint jedoch nicht zu funktionieren.

Ich habe hier mehrere Threads überprüft, die sich mit dem Problem befassen, und festgestellt, dass die meisten von ihnen die Verwendung des verfügbaren Composer-Manager- Moduls vorschlagen, obwohl auf der Modulseite auf drupal.org angegeben ist, dass es aufgrund der verbesserten Verwendung von Composer durch Drupal seit Version 8.1 veraltet ist

Hier ist meine composer.json-Datei im Stammverzeichnis meines Moduls:

{
"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": "[email protected]"
    }
]
}

und eine Factory-Klasse im Stammverzeichnis des src- Verzeichnisses, die versucht, eine Klasse aus dem graph-sdk zu laden.

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

}

Das Ergebnis ist ein class not foundFehler, wenn ich meinen Code ausführe. Sollte die Abhängigkeit nicht automatisch geladen werden oder mache ich etwas falsch?

Vielen Dank.

crzpiot
quelle

Antworten:

7

Composer Manager ist nur ein kleiner Wrapper um das Merge Plugin, das wir heutzutage im Kern haben.

Registrieren Sie Ihr Modul im Stammverzeichnis composer.jsonIhres Projekts, suchen Sie nach extra> Merge-Plugin> Include. Es sollte so aussehen:

"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.jsonist der Weg zu dir composer.json. Es hängt davon ab, wo Sie Ihr Modul haben.

composer installDanach laufen .

Webflo
quelle