it-swarm.com.de

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

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 composer install comand installiert alle Abhängigkeiten korrekt; 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 Moduls Composer Manager vorschlagen, obwohl auf der Modulseite auf drupal.org angegeben ist, dass es aufgrund von Drupal veraltet ist verbesserte Verwendung von composer seit Version 8.1

Hier ist meine Datei composer.json 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 von src, 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 found Fehler beim Ausführen meines Codes. Sollte die Abhängigkeit nicht automatisch geladen werden oder mache ich etwas falsch?

Vielen Dank.

7
crzpiot

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

Registrieren Sie Ihr Modul im Stammverzeichnis composer.json Ihres 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.json ist der Weg zu deinem composer.json. Es hängt davon ab, wo Sie Ihr Modul haben.

Lauf composer install danach.

7
webflo