"Optionale" vs. "Erzwungene" Events?
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
"Optionale" vs. "Erzwungene" Events?
Ich dachte gerade über Kombinationen von Extensions nach. Hierbei habe ich mich gefragt, wie Events behandelt werden, wenn das jeweilige Gegenstück nicht existiert.
Ich kann ja beispielsweise in meine Extension A einen Listener einbauen, der sich in die Extension B einklinken soll. Was passiert nun, wenn Extension B aber gar nicht installiert ist, der Hook also gar nicht existiert? Führt das beim auslesen der services.yml zu einem Fehler? Oder wird der betreffende Listener einfach nur nicht ausgeführt? Sieht das bei den Template Events anders aus?
Unabhängig davon, wie sich phpBB nun in dem Fall konkret verhält, gibt es die Möglichkeit, das jeweils andere Verhalten zu bekommen? Kann ich also dafür sorgen, dass die Extension sich nicht installieren lässt, wenn Extension B nicht existiert, bzw. bewirken, dass bei Fehlen von Extension B (im anderen Fall) der Listener eben einfach ignoriert wird?
Spontan hätte ich eine migration erstellt, die von einer migration in der anderen Extension abhängt um einen Installationsfehler zu produzieren, oder lassen sich Abhängigkeiten von anderen Extensions in der composer.json definieren, analog zu den Abhängigkeiten, die dann unter vendor abgelegt werden? Wie würde sich phpBB in dem Fall verhalten? Installiert es einfach die andere Migration, obwohl die andere Extension möglicherweise nur hochgeladen, aber gar nicht aktiviert ist? Wie verhält sich das, wenn Extension B deaktiviert wird? Ich nehme nicht an, dass das auch Extension A deaktivieren würde, oder?
Ich kann ja beispielsweise in meine Extension A einen Listener einbauen, der sich in die Extension B einklinken soll. Was passiert nun, wenn Extension B aber gar nicht installiert ist, der Hook also gar nicht existiert? Führt das beim auslesen der services.yml zu einem Fehler? Oder wird der betreffende Listener einfach nur nicht ausgeführt? Sieht das bei den Template Events anders aus?
Unabhängig davon, wie sich phpBB nun in dem Fall konkret verhält, gibt es die Möglichkeit, das jeweils andere Verhalten zu bekommen? Kann ich also dafür sorgen, dass die Extension sich nicht installieren lässt, wenn Extension B nicht existiert, bzw. bewirken, dass bei Fehlen von Extension B (im anderen Fall) der Listener eben einfach ignoriert wird?
Spontan hätte ich eine migration erstellt, die von einer migration in der anderen Extension abhängt um einen Installationsfehler zu produzieren, oder lassen sich Abhängigkeiten von anderen Extensions in der composer.json definieren, analog zu den Abhängigkeiten, die dann unter vendor abgelegt werden? Wie würde sich phpBB in dem Fall verhalten? Installiert es einfach die andere Migration, obwohl die andere Extension möglicherweise nur hochgeladen, aber gar nicht aktiviert ist? Wie verhält sich das, wenn Extension B deaktiviert wird? Ich nehme nicht an, dass das auch Extension A deaktivieren würde, oder?
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
- Elsensee
- Ehemaliges Teammitglied
- Beiträge: 832
- Registriert: 19.05.2010 15:14
- Wohnort: Hamburg
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Hmm.. Interessante Fragen..
Das passiert aufgrund der internen Funktionsweise von Symfony. Die Zuordnung
Also einfach als würde es nie aufgerufen werden.
Bei Template-Events läut das ähnlich; hier wird bei einem Event im Template einfach nach einer Event-Datei in allen Extensions gesucht und wenn's diese nicht gibt, dann Pech.
Wenn ein Event nicht existiert und du dennoch dem Event eine Methode zuweist, passiert nichts. (die services.yml hat damit auch nichts zu tun)gn#36 hat geschrieben:Ich kann ja beispielsweise in meine Extension A einen Listener einbauen, der sich in die Extension B einklinken soll. Was passiert nun, wenn Extension B aber gar nicht installiert ist, der Hook also gar nicht existiert? Führt das beim auslesen der services.yml zu einem Fehler? Oder wird der betreffende Listener einfach nur nicht ausgeführt? Sieht das bei den Template Events anders aus?
Das passiert aufgrund der internen Funktionsweise von Symfony. Die Zuordnung
Event => Methode
wird in Symfony in einem Array gespeichert mit der gleichen Zuordnung. Wird nun ein Event getriggert, guckt Symfony welche Funktionen im Array mit dem Key "Event" verfügbar sind.Also einfach als würde es nie aufgerufen werden.
Bei Template-Events läut das ähnlich; hier wird bei einem Event im Template einfach nach einer Event-Datei in allen Extensions gesucht und wenn's diese nicht gibt, dann Pech.

Ja. Du kannst in der ext.phpgn#36 hat geschrieben:Unabhängig davon, wie sich phpBB nun in dem Fall konkret verhält, gibt es die Möglichkeit, das jeweils andere Verhalten zu bekommen? Kann ich also dafür sorgen, dass die Extension sich nicht installieren lässt, wenn Extension B nicht existiert, bzw. bewirken, dass bei Fehlen von Extension B (im anderen Fall) der Listener eben einfach ignoriert wird?
public function is_enableable()
implementieren. Dort kannst du dann jegliche Checks durchlaufen lassen und true
zurückgeben, wenn du sie zur Installation freigibst und false
halt wenn nicht. Eine Fehlermeldung kann man an dieser Stelle glaube ich nicht ausgeben, aber vielleicht könnte hier auch ein einfaches trigger_error
funktionieren. (Auch wenn das zu ungewünschten Ergebnisse mit der Konsolenschnittstelle führen könnte)Posts mostly powered by GitHub and phpBB.de Cross-Reference
2015-03-20 - Never forget
2015-03-20 - Never forget

- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Hmmm ist vielleicht nicht die eleganteste LösungJa. Du kannst in der ext.php public function is_enableable() implementieren.
Theoretisch müsste man das über migrations lösen können
Code: Alles auswählen
static public function depends_on()
{
return array('\dave\seo_url\migrations\release_1_0_0');
}
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
- Elsensee
- Ehemaliges Teammitglied
- Beiträge: 832
- Registriert: 19.05.2010 15:14
- Wohnort: Hamburg
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Warum nicht?
Wenn du bei
Klar kannst du auch bei den Migration Abhängigkeiten angeben, was ich zusätzlich noch tun würde - nur nicht alleine.
Wenn du bei
is_enableable()
false zurückgibst, wird im ACP eine schöne Fehlermeldung á la "Die Extension kann nicht aktiviert werden" ausgegeben.Klar kannst du auch bei den Migration Abhängigkeiten angeben, was ich zusätzlich noch tun würde - nur nicht alleine.

Posts mostly powered by GitHub and phpBB.de Cross-Reference
2015-03-20 - Never forget
2015-03-20 - Never forget

- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Macht das nicht mehr Sinn? Da wird doch (hoffentlich) auch eine entsprechende Fehlermeldung ausgegeben. Vermutlich eine die mehrsagender ist. Nachteilhaft wäre hier nur, dass die andere Extension wohl automatisch mit-installiert würde, wenn sie vorhanden ist.Klar kannst du auch bei den Migration Abhängigkeiten angeben
Vermutlich wird is_enabled() garnicht erst ausgeführt, wenn er die migration in depends_on() nicht findet.
There are only 10 types of people in the world: Those who understand binary, and those who don't
- nickvergessen
- Ehrenadmin
- Beiträge: 11559
- Registriert: 09.10.2006 21:56
- Wohnort: Stuttgart, Germany
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Der Migrator weiß aber nicht von welcher Extension die Migration ist, die fehlt.D@ve hat geschrieben:Macht das nicht mehr Sinn? Da wird doch (hoffentlich) auch eine entsprechende Fehlermeldung ausgegeben. Vermutlich eine die mehrsagender ist. Nachteilhaft wäre hier nur, dass die andere Extension wohl automatisch mit-installiert würde, wenn sie vorhanden ist.Klar kannst du auch bei den Migration Abhängigkeiten angeben
Vermutlich wird is_enabled() garnicht erst ausgeführt, wenn er die migration in depends_on() nicht findet.
Wenn die Ext A nicht ohne Ext B geht, sollte
is_enableable()
benutzt werden.Wenn nur eine Anzeige dann nicht geht muss nichts getan werden.
kein Support per PN
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Naja, ich finde die Abhängigkeit von anderen Migrations eigentlich schon sinnvoll. Das erlaubt einem modulare Extensions zu bauen, die sicher zu einander kompatibel sind. Je nach dem was das für eine Extension ist reicht es ja auch, wenn von der anderen Extension die Daten in der Datenbank sind.
Zum Beispiel könnte man auf die Weise für eine Kalender Extension ein alternatives Interface bauen, das die Daten der anderen Kalender Extension nutzt und somit dem Admin erlaubt zwischen beiden umzuschalten. Der hat vielleicht festgestellt, dass er lieber die andere Extension weiternutzen will und den Funktionsumfang des Originals eigentlich gar nicht braucht. Er kann einfach die unerwünschte Extension deaktivieren und nutzt die Daten mit der anderen Extension weiter.
Einen Schritt weiter gedacht könnte man auch eine Meta-Extension bauen, die selbst überhaupt kein Interface mehr bereitstellt, sondern nur die Daten verwaltet. Analog zu den phpBB Styles kann man dann darauf aufbauend verschiedene weitere Extensions bauen, die alle kompatibel sind und sich leicht austauschen lassen, weil sie die selben Daten nutzen. Weil es von der Daten Extension dann aber logischerweise auch verschiedene Versionen geben kann wäre in meinen Augen die logische Vorgehensweise, das mit Abhängigkeiten von Migrations zu lösen.
Zum Beispiel könnte man auf die Weise für eine Kalender Extension ein alternatives Interface bauen, das die Daten der anderen Kalender Extension nutzt und somit dem Admin erlaubt zwischen beiden umzuschalten. Der hat vielleicht festgestellt, dass er lieber die andere Extension weiternutzen will und den Funktionsumfang des Originals eigentlich gar nicht braucht. Er kann einfach die unerwünschte Extension deaktivieren und nutzt die Daten mit der anderen Extension weiter.
Einen Schritt weiter gedacht könnte man auch eine Meta-Extension bauen, die selbst überhaupt kein Interface mehr bereitstellt, sondern nur die Daten verwaltet. Analog zu den phpBB Styles kann man dann darauf aufbauend verschiedene weitere Extensions bauen, die alle kompatibel sind und sich leicht austauschen lassen, weil sie die selben Daten nutzen. Weil es von der Daten Extension dann aber logischerweise auch verschiedene Versionen geben kann wäre in meinen Augen die logische Vorgehensweise, das mit Abhängigkeiten von Migrations zu lösen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
- nickvergessen
- Ehrenadmin
- Beiträge: 11559
- Registriert: 09.10.2006 21:56
- Wohnort: Stuttgart, Germany
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Naja da würdest du dann aber in der require section in der composer.json eintragen, dass deine Extension die Extension XYZ braucht.
Und nicht von einer einzelnen Datenbank Migration abhängen.
Das Feature das zu Überprüfen fehlt noch und wird hoffentlich mit 3.2 kommen, aber das ist eher, was du suchst.
Und nicht von einer einzelnen Datenbank Migration abhängen.
Das Feature das zu Überprüfen fehlt noch und wird hoffentlich mit 3.2 kommen, aber das ist eher, was du suchst.
kein Support per PN
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
Re: "Optionale" vs. "Erzwungene" Events?
Das stimmt, das würde ich zusätzlich machen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.