Ich bin Entwickler und Betreuer des CiviCRM-Projekts. Wir haben versucht, eine Drupal 8-Version von CiviCRM zu erstellen, und es ist ein langer Weg zurückgelegt. Wir schlagen unsere Köpfe gegen unsere kollektiven Tastaturen und versuchen, einen Hauptblocker für das Projekt zu finden.
CiviCRM verwendet Symfony seit einiger Zeit und die enthaltene Version unterscheidet sich von der mit Drupal gelieferten Version.
Wir können CiviCRM mit Drupal 8 installieren, aber nachdem Sie es installiert haben, können wir kein anderes Drupal-Modul mehr installieren.
Ich glaube, es läuft auf eine Situation hinaus, in der die CiviCRM-Version von Symfony vor der Drupal-Version geladen wird, was zu Problemen führt.
Kennt jemand ein Drupal 8-Modul, das eine andere Version von Symfony enthält als das, das mit Drupal geliefert wird?
Kürzlich bin ich auf das Ludwig-Projekt gestoßen. Dieses Modul ermöglicht die Registrierung von Namespaces in einer Klasse, die erweitert wirdServiceProviderBase
.
Könnte die Drupal 8-Version des CiviCRM-Moduls eine CivicrmServiceProvider.php-Datei enthalten, die eine CivicrmServiceProvider
Klasse definiert , und eine register()
Methode, die einen Containernamensraum hinzufügt, damit dies funktioniert?
Viele CiviCRM-Dateien enthalten use
Anweisungen wie Drupal, die mit Symfony beginnen, wie hier .
Wir legen CiviCRM Core tatsächlich im Drupal-Ordner doc_root / libraries ab und verwenden das Bibliotheksmodul.
Dies ist das Repo für die CiviCRM Drupal Modul 8.x Version , wenn jemand schauen möchte, was wir bisher haben. Wenn jemand das magische Elixier dafür hat, kann ich Ihnen sagen, dass es in unserer Gemeinde viele glückliche Menschen geben würde. Wenn Sie also wissen, wie Sie uns helfen können, tun Sie dies bitte.
CiviCRM wird installiert und die CiviCRM-Seiten funktionieren. Was nicht funktioniert ist, dass wir nach der Installation von CiviCRM keine weiteren Module über die Seite admin / modules installieren können. Soweit ich weiß, ist das das einzige, was kaputt ist. Auch die Installation von Modulen mit Drush nach der Installation von CiviCRM funktioniert.
Der Versuch, ein anderes Modul nach der Installation von CiviCRM zu installieren, führt zu folgendem Fehler:
Schwerwiegender PHP-Fehler: Rufen Sie die undefinierte Methode Symfony \ Component \ DependencyInjection \ Definition :: setFactory () in /var/www/html/civi-for-d8/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php in Zeile 206 auf
Das ist in Drupal 8.3.5. Der Versuch, CiviCRM für Drupal 8 in einer sauberen Drupal 8.4-dev-Instanz zu installieren, führt zu folgendem Fehler:
Drupal \ Component \ Serialization \ Exception \ InvalidDataTypeException: Der reservierte Indikator "@" kann keinen einfachen Skalar starten. Sie müssen den Skalar in Zeile 8 (in der Nähe von "arguments: [@string_translation, @ civicrm.page_state]") angeben. in Drupal \ Component \ Serialization \ YamlSymfony :: decode () (Zeile 40 von /var/www/html/drupal84/core/lib/Drupal/Component/Serialization/YamlSymfony.php).
Antworten:
Ich denke also, wenn CiviCRM über Composer (dh
composer require civicrm/civicrm-core
im Drupal-Stammverzeichnis) in Drupal 8 installiert würde und die Verwendung von Symfony durch CiviCRM mit Symfony 2.8 oder 3.x kompatibel wäre (dh keine veraltete Funktionalität verwenden würde), könnte dies funktionieren.Dies würde alles im Herstellerverzeichnis von Drupal installieren, anstatt zwei zu haben, und würde bedeuten, dass CiviCRM die Symfony-Version in Drupal 8 verwenden würde. Aber wenn CiviCRM mit späteren Symfony-Versionen kompatibel wäre (selbst wenn es eine ältere Version für Drupal enthalten würde) 6 & 7 und andere CMS) sollte es in Ordnung sein.
Ich glaube?AKTUALISIERT: Ja, es funktioniert - ich habe es versucht. :-) Ich habe das Folgende ursprünglich in der CiviCRM -Problemwarteschlange ( CRM-17652 ) gepostet , aber der Vollständigkeit halber hier erneut gepostet .
Die große Idee:
Da der Komponist für viele Leute ziemlich neu ist, werde ich versuchen, Schritt für Schritt voranzukommen, von einigen hochrangigen Komponisten bis hin zu einer Möglichkeit, wie dies in CiviCRM geschehen könnte:
^2.4.3
mindestens 2.4.3 und höher (jedoch nicht) einschließlich) 3.0.0)^2.5
in seiner composer.json "benötigt", was bedeutet, dass es mit den Versionen 2.5.0 bis (aber ohne) 3.0.0 kompatibel istcomposer require civicrm/civicrm-core
die CiviCRM-Bibliothek und alle zugehörigen Abhängigkeiten. Wenn CiviCRM mit Symfony 2.8 kompatibel ist (wie in Drupal 8.3.x verwendet), wird alles installiert und funktioniert einwandfrei, wenn Sie das einzelne Symfony 2.8 von Drupal verwenden. Alle Abhängigkeiten landen im Herstellerverzeichnis von Drupal.Der Antrag:
Für Komponisten-basierte CMS denke ich wirklich, dass dies der richtige Weg ist. Während dieses Problem derzeit Symfony und Drupal betrifft, da die PHP-Community immer mehr Bibliotheken von Drittanbietern über Composer verwendet, kann dies durchaus Auswirkungen auf andere CMS mit anderen Versionskonflikten haben.
Ein paar funktionierende Codes zum Testen:
Also, wie versprochen, habe ich dies tatsächlich in begrenztem Umfang zum Laufen gebracht :-) Ich komme aus der Sicht von Drupal / Composer / Symfony völlig darauf zurück - ich habe nicht viel Erfahrung mit CiviCRM, also gibt es wahrscheinlich einige bessere Möglichkeiten, um meinen Prozess unten zu tun. Ich freue mich über jeden Rat!
git clone https://github.com/dsnopek/civicrm-drupal.git --branch composer-library
/admin/modules
) und installieren Sie das CiviCRM-Moduldrush cr
)Nach all dem verwendet CiviCRM Symfony 2.8 von Drupal und die Abhängigkeiten in Drupals Herstellerverzeichnis und lädt nichts aus seinem eigenen Herstellerverzeichnis. Huzzah!
Ich habe getestet, ob das "Telefon" -Modul aktiviert ist, was vor diesen Änderungen fehlgeschlagen ist (siehe meine Schritte zum Reproduzieren ), aber es funktioniert einwandfrei. :-)
quelle
Ich denke nicht, dass das möglich ist.
Drupal 8.4 ist eigentlich schon auf Symfony 3 umgestiegen, obwohl es noch ähnliche Diskussionen zum Thema Drush gibt, die das gleiche Problem haben. siehe Drush 8.x installiert Drupal 8.4.x nicht und Drush Master installiert Drupal 8.3.x nicht und Symfony-Komponenten werden auf 3.2.6 aktualisiert
Es ist nicht möglich, zwei verschiedene Symfony-Versionen zu laden, entweder Sie brechen Ihre Integration oder Sie brechen Drupal. Vielleicht ist symfony3 noch nicht in Version 8.4, aber die Sicherheitsunterstützung für symfony2 endet noch vor der Sicherheitsunterstützung für Drupal8. Irgendwann müssen wir also wechseln.
quelle
Theoretisch sind hier nur der Dateispeicherort und der Klassennamensraum von Bedeutung. Leider können Sie die einzigen Tools, die mir in Composer bekannt sind, nicht pro VERSION, sondern nur pro Paketnamen angeben.
Haben Sie versucht, es als vollständig separaten Autoloader einzurichten?
quelle