Ich erstelle ein benutzerdefiniertes Modul in Drupal 8. Es enthält einige YAML-Konfigurationsdateien.
Während der Entwicklung muss ich die Konfiguration ändern und ergänzen, z. B. um ein weiteres Feld zu meiner benutzerdefinierten Entität hinzuzufügen.
Derzeit habe ich nur die Möglichkeit gefunden, Drupal auf die Änderungen aufmerksam zu machen, indem ich das Modul deinstalliere und erneut installiere.
Gibt es eine Möglichkeit, Drupal zu veranlassen, zu überprüfen, ob die von Modulen bereitgestellten Konfigurationsdateien mit der aktiven Konfiguration identisch sind, und wenn nicht, die aktive Konfiguration zu aktualisieren? Wie werden Modulupdates gehandhabt? In D7 hook_update_N
würde verwendet, um Felder mit PHP hinzuzufügen, aber es sieht so aus, als sollte dies vom CM in D8 behandelt werden?
Dinge, die ich versucht habe, nachdem ich die yml-Dateien im Modul aktualisiert habe:
drush cr
, Config Sync.Manuelles Kopieren aller aktualisierten Konfigurationsdateien nach
sites/default/files/config_XXX/staging/
- dies führt jedoch zu dem Fehler "Die bereitgestellte Konfiguration kann nicht importiert werden, da sie von einer anderen Site als dieser Site stammt. Sie können die Konfiguration nur zwischen geklonten Instanzen dieser Site synchronisieren." .Manuelles Importieren der Dateien nacheinander mit dem Konfigurationsmanager. Das funktioniert, aber natürlich muss es einen automatischeren Weg geben.
[EDIT] Verwenden Sie das config_update- Modul manuell , um Änderungen zu überprüfen und die Konfiguration des Moduls wiederherzustellen . Auch dies ist manuell.
BEARBEITEN: Vom Verwalten der Konfiguration - Tun und Verbieten
NICHT
Versuchen Sie, die aktive Konfiguration auf Ihrer Site zu ändern, indem Sie die Dateien im Konfigurations- / Installationsverzeichnis eines Moduls ändern. Dies funktioniert NICHT, da Drupal nur dann aus diesem Verzeichnis liest, wenn das Modul installiert ist.
... ändert aber es sind gehen passieren, es sei denn , Module gebunden sind , was auch immer Config sie in ihrem ersten Release erforderlich und aktualisieren nie oder Config hinzuzufügen.
Danke im Voraus.
quelle
hook_update_N
würde ich annehmen, aber ich bin nicht sicher, washook_update_N
. Hervorragender Artikel über Drupal 8 für kleine Websites (und Teil 2 ). In D8 "besitzen Sites ihre Konfiguration, keine Module" .Antworten:
Wie in der ursprünglichen Frage und den nachfolgenden Kommentaren erwähnt, gibt es eine Vielzahl von Contrib-Modulen und manuellen Methoden, um dies zu erreichen.
Es automatisch oder auf eine benutzerdefinierte Art und Weise zu tun, ist meiner Meinung nach
hook_update_N()
immer noch die wahrscheinlich praktikabelste Option.Dies ist beispielsweise ein Beispiel für die Aktualisierung des Head 2 Head, um Folgendes
system.site
festzulegendefault_langcode
:Sie können auch die Konfiguration einlesen (empfohlen nur zum Hinzufügen einer neuen Konfiguration, nicht unbedingt zum Aktualisieren oder Überschreiben der Konfiguration, die möglicherweise angepasst wurde):
wo
$path
ist der absolute Pfad zurmy_config.foo.yml
Datei.quelle
Da ich auch auf diese Frage gestoßen bin, aber hier nicht die richtige Antwort für meine Situation gefunden habe, möchte ich eine weitere Antwort hinzufügen.
Bitte beachten Sie: Anti-Pattern voraus!
Anwendungsfall
Wenn wir Projekte entwickeln, aktualisieren wir unsere Test- / Akzeptanzumgebung ständig mit neuen Konfigurationsaktualisierungen. Nehmen wir zum Beispiel ein einfaches fiktives News-Modul, wir möchten dem Modul einen Inhaltstyp hinzufügen und diesen in unserer Akzeptanzumgebung bereitstellen. Nach der Überprüfung sind wir zu dem Schluss gekommen, dass einige Felder fehlen und andere Dinge, die sich auf die Konfiguration beziehen. Da wir wissen, dass die Akzeptanzumgebung in der Konfiguration nicht aktualisiert wird, möchten wir wirklich nur die gesamte Konfiguration aus dem Modul neu laden, während neue Funktionen hinzugefügt werden, und nicht durch den Import jeder geänderten
.yml
Datei gestört werden .Wir brauchen unsere Konfiguration nur in Modulen, wenn wir Multisites entwickeln. Für einzelne Sites verwenden wir meist nur die exportierte Site-Konfiguration, bei der der nächste Schritt nicht erforderlich ist.
Konfiguration komplett neu importieren (Anti-Pattern!)
Wir haben festgestellt, dass wir mithilfe des ConfigInstaller- Dienstes die vollständige Konfiguration von einem bestimmten Modul erneut importieren können.
Mit Vorsicht verwenden!
Ich möchte hinzufügen, dass dadurch alle aktiven Inhalte überschrieben werden, die in der Umgebung geändert wurden. Verwenden Sie diese Lösung daher nur, wenn Sie sicher sind, dass die aktive Konfiguration überschrieben werden kann. Wir werden dies niemals in einer Produktionsumgebung verwenden und nur in der frühen Entwicklung anwenden.
Probieren Sie zuerst die Lösung von @ jhedstrom aus, bevor Sie diese in Betracht ziehen.
quelle
Ich habe diese Gist auf GitHub gefunden, die die Konfiguration eines bestimmten Moduls mit drush zurücksetzt / neu lädt:
quelle
Basierend auf meinem Kommentar: Wie aktualisiere ich die Konfiguration eines Moduls?
Ich habe eine kleine Funktion erstellt, die mir dabei hilft, hier mein Beispielcode:
quelle
Die obige Antwort (vollständiger Neuimport) hat auch für meinen Anwendungsfall funktioniert, aber zuerst habe ich ein wenig über einen selektiveren Neuimport nachgedacht. Hier ist der Code, den ich hatte, der als Update-Hook zu funktionieren schien und der auf dem Code im config_update-Modul basierte:
quelle
Das Configuration Synchronizer- Modul hilft dabei, dieses Problem auf nette Weise zu lösen. Diese Modulsuite mit 7 Modulen scheint nur für diesen Fall etwas übertrieben zu sein (es ist hauptsächlich beabsichtigt, Updates sicher zusammenzuführen, ohne Anpassungen zu überschreiben), aber aufgrund ihres Konzepts können auch Konfigurationsänderungen von den Modulen / install und nachverfolgt und importiert werden / optionale Ordner schnell.
Grundsätzlich können Sie es wie folgt testen:
Hinweis: Wenn Sie config_sync nur verwenden möchten, um den Konfigurationsimport während der Modulentwicklung zu beschleunigen (und sich nicht um das Zusammenführen mit Client-Updates kümmern möchten), ist es ausreichend, diese Suite nur in Ihrer lokalen (Entwicklungs-) Umgebung zu installieren und zu aktivieren ( vorausgesetzt, Ihr Modul wechselt nach dem Abschluss in eine höhere Umgebung und Sie verwenden das D8-Kernkonfigurationsmanagement, um die Konfiguration in eine höhere Umgebung zu übertragen.
quelle