-
-
Notifications
You must be signed in to change notification settings - Fork 213
3.5.25: Keine Namespace-Deklaration in der DCA möglich #8682
Comments
Das ist in der Tat nicht gut. @contao/developers /cc |
Das hat zuvor vermutlich nur dann funktioniert wenn es für den betroffenen DCA nur eine einzige PHP-Datei gibt, sprich eine eigene Tabelle/Erweiterung, liege ich da richtig @Babelfisch? @leofeyer Könnten wir eventuell auf den Fall prüfen, dass wenn es nur um eine einzige Datei geht, kein Namespace-Block hinzugefügt wird? |
Ja, ich habe das in eigenen Tabellen verwendet. |
Darf ich fragen, warum man einen Namespace in einer DCA Datei definieren will? |
Ja, aber löst das das Problem? In der Cache-Datei wäre ja dann ein Namespace-Deklaration mitten im Dokument und das frisst der PHP-Compiler auch nicht. <?php
namespace / {
// core
}
namespace Mein\Namespace;
// extension code
namespace / {
// andere extension
} |
Korrekt. Deswegen meine Frage. Das macht überhaupt keinen Sinn für mich. Klassen gehören nicht in eine DCA-Datei und deswegen weiss ich auch nicht warum man einen Namespace deklarieren möchte. Man kann welche |
@Toflar: Na ja, bisher hat ja nichts dagegen gesprochen und da ich bei mir konsequent mit Namespaces gearbeitet habe, hab ich das auch in der DCA durchgezogen. Ist sicherlich nicht überall notwendig aber ein Minor-Release mit so einem BC-break ist auch nicht toll. |
Naja, doch eben eigentlich schon. Beim Aufbau des internen Caches würde es crashen, hättest du eine zweite Datei für dieselbe Tabelle was ja eher die Regel als die Ausnahme ist. Es ist also generell eigentlich nicht zu empfehlen weil es immer nur dann funktioniert, wenn nur genau eine Datei für einen DCA zuständig ist. Da man das als Extension-Entwickler nie wissen kann, fallen also per se alle Erweiterungen im ER/Composer weg. Es wäre ausschliesslich für applikationsspezifischen Code erlaubt und ich weiss nicht wie sinnvoll es ist, da ein Ausnahme-Handling einzubauen. Es würde dadurch ja quasi eine "bad practice" befürwortet. |
@Toflar das stimmt nicht ganz, und nach meinem Wissen wurde das bisher so gehandhabt. Ein Namespace kann Klammern haben, folgendes ist valid: namespace {
// global stuff
}
namespace Contao {
// Contao stuff
} |
Das ist valid, hat keiner was anderes behauptet. Es funktioniert aber nicht, wenn Dateien zusammengeführt werden. Du darfst in einer DCA-Datei einfach keine Namespaces definieren. Wir könnten, wenn genau eine Datei einen definiert, den als |
Es löst das Problem nicht vollständig, mehrere Dateien würden nach wie vor nicht funktionieren, das war aber auch vor unserer Änderung der Fall. Bei nur einer einzigen DCA-Datei pro Tabelle würde es aber wieder funktionieren und somit hätten wir den BC break behoben. Ich seh es aber auch wie @Toflar, dass ich nicht sicher bin ob der Aufwand dafür steht, zumal man die DCA-Klasse ja auch einfach in eine eigene Datei verschieben kann ohne großen Aufwand. |
Ich sehe es genauso, nur ist es halt schon so, dass es sich hierbei um einen BC-Break handelt, den wir irgendwie wieder beheben müssen. Ich sehe drei Möglichkeiten:
Nummer 3 wäre vermutlich die sauberste Lösung. |
Variante 3 könnte vermutlich ähnlich funktionieren wie das |
ich bin für variante 3 und zwar pauschal, egal ob nur eine datei oder mehrere zusammen gefasst werden, oder ob namespace ; oder namespace {} verwendet wird. ein pseudo algorithmus könnte so aussehen:
ich weiß nicht, ob zur zeit die dateien "zusammen geregext werden", aber es gibt da verschiedene parser, um php dateien sauber zu parsen und dann die ASTs zusammen zu fügen und zu dumpen. |
Behoben in bf11970. |
Nach dem Update auf die 3.5.25 und vermutlich dieser Änderung #8635, kann ich keine eigenen Namespaces mehr in der DCA angeben. Beispiel:
Fehler:
Nutze ich die Klammern-Schreibweise für Namespaces kommt dann dieser Fehler:
Das sprengt jetzt eine ganze Reihe meiner Erweiterungen. :-(
The text was updated successfully, but these errors were encountered: