Skip to content

feat: Add PHP 8.5 compatibility#230

Open
Avatarsia wants to merge 5 commits intoOpenXE-org:masterfrom
Avatarsia:php85-upgrade
Open

feat: Add PHP 8.5 compatibility#230
Avatarsia wants to merge 5 commits intoOpenXE-org:masterfrom
Avatarsia:php85-upgrade

Conversation

@Avatarsia
Copy link
Copy Markdown
Contributor

  • Fix 107 implicitly nullable parameters across codebase
  • Add #[AllowDynamicProperties] to ApplicationCore, Application, Config
  • Replace deprecated each() with foreach (5 instances)
  • Modernize UTF-8 encoding functions (45+ instances)
  • Fix curly brace string access syntax (9 instances)
  • Remove deprecated ${} string interpolation syntax
  • Remove deprecated curl_close() calls
  • Fix undefined variable bug in shopimporter_shopware6.php

Dependencies:

  • Update Guzzle 6 -> 7.10
  • Update Smarty 3 -> 4.5
  • Update aws-sdk-php to 3.332 (security)
  • Update phpmailer to 6.9 (security)
  • Update tcpdf to 6.7 (security)

Tested:

  • Syntax check: 2440 files, 0 errors
  • Composer dependencies resolved

mit dokumentation in diesem repo https://github.com/Avatarsia/OpenXE/tree/php85-upgrade-with-docs

OpenXE Developer added 2 commits January 26, 2026 09:27
- Fix 107 implicitly nullable parameters across codebase
- Add #[AllowDynamicProperties] to ApplicationCore, Application, Config
- Replace deprecated each() with foreach (5 instances)
- Modernize UTF-8 encoding functions (45+ instances)
- Fix curly brace string access syntax (9 instances)
- Remove deprecated ${} string interpolation syntax
- Remove deprecated curl_close() calls
- Fix undefined variable bug in shopimporter_shopware6.php

Dependencies:
- Update Guzzle 6 -> 7.10
- Update Smarty 3 -> 4.5
- Update aws-sdk-php to 3.332 (security)
- Update phpmailer to 6.9 (security)
- Update tcpdf to 6.7 (security)

Tested:
- Syntax check: 2440 files, 0 errors
- Composer dependencies resolved
@exciler
Copy link
Copy Markdown

exciler commented Feb 2, 2026

Vielen Dank! Das ist eine Menge :-)

Ich habe vor einigen Monaten die composer.json überhaupt in einen brauchbaren Zustand gebracht und zunächst von Paket-Updates abgesehen, da in den Changelogs eine Breaking Changes auftauchten. Ich war mir nicht sicher ob uns die betreffen und hatte da keine Zeit das zu prüfen. Hast du das im Rahmen deiner Änderungen gemacht oder sollten wir das noch tun?

@Avatarsia
Copy link
Copy Markdown
Contributor Author

Also ich habe es soweit geprüft wie ich konte, sprich es einmal mit meinen Daten durchlaufen lassen und geschaut ob irgendwo fehler auftauchen, aber ich kann bei weitem nicht jeden Edgecase abdecken, entsprechend schau es dir bitte auch nochmal an.

@exciler
Copy link
Copy Markdown

exciler commented Feb 2, 2026

Alles klar, mache ich. Jeden Edgecase werde ich auch nicht abdecken können, aber ich schaue dann nochmal gezielt an die Stellen die mir damals Sorgen gemacht hatten...

Comment thread composer.json Outdated
"fiskaly/fiskaly-sdk-php": "1.2.100",
"guzzlehttp/guzzle": "^6.5.5",
"laminas/laminas-mail": "^2.12.5",
"guzzlehttp/guzzle": "^7.8",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Laut guzzle gibt es Support für PHP 8.5 erst ab Version 7.10:
https://github.com/guzzle/guzzle/releases

Spricht etwas gegen 7.10?

Comment thread composer.json Outdated
"ext-soap": "*",
"aura/sqlquery": "2.7.1",
"aws/aws-sdk-php": "3.175.2",
"aws/aws-sdk-php": "^3.332.0",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warum hast du hier die Version 3.332 ausgewählt und nicht die neueste (3.368)?

Comment thread composer.json Outdated
"swiss-payment-slip/swiss-payment-slip": "0.13.0 as 0.11.1",
"swiss-payment-slip/swiss-payment-slip-fpdf": "0.6.0",
"tecnickcom/tcpdf": "6.3.5",
"tecnickcom/tcpdf": "^6.7",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warum nicht 6.10?

@Avatarsia
Copy link
Copy Markdown
Contributor Author

ich werde mal schauen ob deine versionen auch laufen oder ob es da probleme gibt, ansonsten update ich das repo entsprechend

@exciler
Copy link
Copy Markdown

exciler commented Feb 2, 2026

Das wäre prima! Vielleicht gibt es auch einen guten Grund, ich konnte nur keinen offensichtlichen erkennen.

@Avatarsia
Copy link
Copy Markdown
Contributor Author

Hier die KI zusammenfassung nach dem Test der Versionen
Zusammenfassung
Aktualisiert die Abhängigkeitseinschränkungen in der
composer.json
auf striktere Versionen, um die PHP 8.5-Kompatibilität zu erzwingen und Regressionen auf ältere, inkompatible Versionen zu verhindern.

Änderungen
Guzzle: Erhöht von ^7.8 auf ^7.10 (Ziel: Expliziter PHP 8.5 Support).
AWS SDK: Erhöht von ^3.332.0 auf ^3.368 (Neueste verfügbare Version für maximale Kompatibilität).
TCPDF: Erhöht von ^6.7 auf ^6.10 (Anpassung an die getestete Version aus dem Final Report).
Verifizierung
✅ Syntax: composer validate erfolgreich.
✅ Resolution: composer update --dry-run hat alle Abhängigkeiten erfolgreich aufgelöst (unter Berücksichtigung des bekannten laminas-mail PHP-Version-Issues).

@Avatarsia
Copy link
Copy Markdown
Contributor Author

"laminas/laminas-mail": "^2.12.5", - kann eigentlich raus wegen php mailer
Bei Fiskaly müsste man mal schauen ob das überhaupt jemand verwendet, ansonsten müssten man hier die API schnittstelle einbinden

@exciler
Copy link
Copy Markdown

exciler commented Feb 3, 2026

Danke dir!

Ja, diese Mail Geschichten müsste man mal vereinheitlichen... aber das ist ne andere Baustelle :-)

@Avatarsia
Copy link
Copy Markdown
Contributor Author

Danke dir!

Ja, diese Mail Geschichten müsste man mal vereinheitlichen... aber das ist ne andere Baustelle :-)

ich arbeite da auch noch an etwas richtig großem, wo ich hoffe dass es nöchste woche fertig wird, da bin ich mal aufs feedback gespannt :D

@exciler
Copy link
Copy Markdown

exciler commented Feb 3, 2026

Achso, pushst du noch den commit mit den neuen Versionen?

@Avatarsia
Copy link
Copy Markdown
Contributor Author

Achso, pushst du noch den commit mit den neuen Versionen?

habs in die dokumentierte branch gepushed xD
sollte jetzt aber auch hier drin sein

@OpenXE-ERP
Copy link
Copy Markdown
Contributor

@Avatarsia

Leider hat der PR merge conflicts, kannst Du das bitte ansehen und ggf. beheben?

@Avatarsia
Copy link
Copy Markdown
Contributor Author

@Avatarsia

Leider hat der PR merge conflicts, kannst Du das bitte ansehen und ggf. beheben?

uff ich sehe es gerade, ich schau es mir an

@Avatarsia
Copy link
Copy Markdown
Contributor Author

ich habe laminas zum großteil durch symfony/mailer + symfony/mime ersetzt, nur ein fork für die imap schnittstelle ist noch da, ich habe das jetzt noch nicht geprüft, aber werft gerne mal einen blick drauf

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Okay, das ist auf der einen Seite ein wirklich guter Schritt, auf der anderen Seite erfordern wir damit jetzt effektiv php 8.2.

Hier sollten wir jetzt einmal abwägen... wenn wir PHP 8.5 unterstützen können ohne PHP 8.1 zu verlieren würde ich das erstmal vorziehen und dann die Erhöhung der Mindestversion auf bspw. 8.3 in einem separaten Schritt mit Ankündigung vornehmen.

Kriegen wir diese beiden Dinge mit vertretbarem Aufwand getrennt?

@OpenXE-ERP
Copy link
Copy Markdown
Contributor

PHP 8.1 ist doch seit Januar unsupported, sehe ich eher kein Problem damit. Evtl. sollten wir noch Grips in einen Major-Version-Wechsel stecken, sodass niemand durch ein Upgrade sein System zerschießt und dann in einer Notfalloperation PHP upgraden muss.

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Ja, genau darum ging es mir. Ich will nur vermeiden, dass jemand ein Update zieht und danach ein Problem hat :-)

@OpenXE-ERP
Copy link
Copy Markdown
Contributor

Ich hätte gerne eine Funktion mit der man gezielt Systemupgrades machen kann, inkl. Beschreibung, Systemanforderungscheck, Datenmigration etc. Evtl. ist es ein guter Zeitpunkt das jetzt anzugehen?

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Was genau meinst du mit "Systemupgrades"?

In meinem Workflow würde das meiste von docker abgedeckt, weil ich einen entsprechenden Container benutze der bereits das richtige php mit apache, extensions und dem entsprechenden OpenXE-Code mitbringt. Bei mir wäre da nur die Frage der Datenmigration, wo es ja einige Best-practices gibt und man sich für einen Weg entscheiden sollte

@OpenXE-ERP
Copy link
Copy Markdown
Contributor

Ich meine OpenXE-Upgrades. Also das was momentan mit git und danach dem Datenbankupgrader gemacht wird. Das rammelt ja einfach die neueste Version drauf und zieht die DB auf links. Da wäre es schön wenn man in minor und major upgrades unterscheiden kann und bei major wird ein Check gemacht, ob das System überhaupt kompatibel ist. Und was momentan komplett fehlt ist das Transformieren von Daten, z.B. weil Tabellen anders strukturiert sein sollen.

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Okay, alles klar.

Ja, strukturierte DB-Upgrades würde ich mir auch sehr wünschen und ich könnte mir vorstellen, dass die laravel-migrations hier eine gute Hilfe für uns sein können, aber da hat @Avatarsia vielleicht noch eine bessere Idee?!

Eine Unterscheidung zwischen minor und major Updates können wir mit dem aktuellen Git-Ansatz ja eigentlich recht einfach umsetzen, wenn wir bspw. in Git mit tags arbeiten. Dies hätte auch den Vorteil, dass wir den master branch nach einem großen Merge (wie diesem hier) nochmal in Ruhe testen können, bevor wir einen Tag erstellen und die Version damit "freigeben"

Gleichzeitig können wir ausgehend von den Tags dann docker-images erzeugen, die immer die nötigen Systemvorraussetzungen mitbringen und insbesondere für "Neueinsteiger" einfach zu nutzen sind. Gleichzeitig können aber alle Nicht-Docker-Nutzer mit ihrem bisherigen Ansatz weiterarbeiten.

Das Git-Update-Theme müsste auch relativ einfach umzusetzen sein, oder?

@Avatarsia
Copy link
Copy Markdown
Contributor Author

eigentlich wollte ich das erst prasentieren wenn ich damit weiter bin, werft mal einen blick auf meinen rework branch

@Avatarsia
Copy link
Copy Markdown
Contributor Author

https://github.com/Avatarsia/OpenXE/tree/rework

localhost:3001/de/login
api unter port 3000

openxe@local.de
admin123

im modern ordner docker-compose up --build -d

es sind aber bis jetzt gerade mal 50% aller module implementiert

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Oha! Puh...

Ich bin jetzt nicht sicher, was ich dazu sagen soll... ich versuche es aber mal:
Du hast dir da krass viel Arbeit gemacht und das schätze ich sehr. Allerdings frage ich mich, warum du nicht vor Beginn deiner Arbeiten einmal mit uns dazu gesprochen hast?
Wir sind ja größere Ideen bisher nicht angegangen weil wir einfach nicht die nötige Zeit dafür aufbringen konnten. Scheinbar hast du deutlich mehr Zeit für OpenXE als die meisten von uns. Aber ob ein Alleingang hier wirklich sinnvoll ist/war... ich weiß es nicht.

Auch ich habe bereits Arbeit in eine Modernisierung des JS-Codes gesteckt, dabei aber auf Vue gesetzt weil ich das lieber mag als React. Ist vermutlich zu 90% eine Geschmacksfrage, aber ist natürlich ungünstig, dass hier zwei Leute in unterschiedliche Richtungen arbeiten.

PostgreSQL als Datenbank finde ich eine gute Idee.

Aber die wohl kontroverseste (gibt es das Wort?!) Entscheidung wird wohl die Implementierung des Backends ebenfalls in TypeScript sein. Ich vermute, dass du damit einen großen Teil der aktuellen Mitstreiter verlieren wirst. Während es natürlich für viele Entscheidungen gute Argumente gibt, bin ich kein Freund von JS/TS im Backend.

Vielleicht magst du ja mal deine Überlegungen teilen, warum du dich für diesen Weg entschieden hast und nicht bspw. einen Wechsel hin zu laravel oder symfony, was sicherlich ein deutlich kleinerer "Bruch" gewesen wäre.

@Avatarsia
Copy link
Copy Markdown
Contributor Author

ras

ich hab n bissl ping pong mit ein paar llm's gespielt um zu schauen was die modernsten ansätze sind die in zukunft auch weiterentwickelt werden und das beste portfolio aus leistung und sicherheit bringen und bin im endeffekt bei diesem setup gelandet.

Backend (Core)
Runtime: Node.js 20 LTS
Framework: NestJS (Enterprise TypeScript Framework)
Sprache: TypeScript 5.x
ORM: Prisma (State-of-the-art für Typsicherheit und DX)
Validierung: Zod (Schema-basierte Validierung für API und DB)
Frontend (Core)
Framework: Next.js 14/15+ (App Router Architektur)
Library: React 18/19
UI-Komponenten: Ant Design (aktuell im Einsatz) / Übergang zu Shadcn/ui + Tailwind CSS (für maximale Flexibilität)
State Management:
Server-State: TanStack Query v5 (Caching, Auto-Refresh, Typsicherheit)
UI-State: Zustand (Minimalistisches Global State Management)
Data & Infrastructure
Datenbank: PostgreSQL 16
Caching: Redis 7
Background Jobs: BullMQ (Redis-basierte Queue)
Storage: MinIO / S3-kompatibel
Tooling & Qualitätssicherung
Monorepo-Management: Turbo (Turborepo)
Testing:
Unit/Integration: Vitest (extrem schnell, moderne Jest-Alternative)
E2E: Playwright (für Browser-Tests)
Linting/Formatting: ESLint + Prettier (mit langfristiger Tendenz zu Biome)

ich habe auch die laravel-migrations diskusion im forum gesehen, da gab es aber einige punkte die dagegen sprachen (welche habe ich nicht mehr im Kopf).

Da das ganze Backend als API-Schnittstelle fungiert, würde es wahrscheinlich auch kein großartiges Problem sein, dort Vue zu nutzen. Für mich war das einfach nur ein Versuch, zu gucken, wie weit ich damit komme und ob ich sowas umgesetzt bekomme. Hat keinerlei Relevanz, ob das am Ende wirklich durchgreift, weil viele der Sachen auch noch nicht wirklich so im Frontend ineinandergreifen, wie ich das gerne hätte.

Und der andere Punkt, der mich eigentlich ein bisschen gestört hat die ganze Zeit, ist, immer wenn ich etwas versucht habe zu integrieren, dann hat es meistens irgendwo das UI zerschossen und das hat mir überhaupt keinen Spaß gemacht.

@exciler
Copy link
Copy Markdown

exciler commented Feb 4, 2026

Lieben Dank für die Erläuterung. Ich bin in vielen Punkten ganz bei dir.

Vue vs React ist wie gesagt in vielen Fällen eine Geschmacksfrage. Wenn man das lange genug analysiert, findet man bestimmt die "bessere" Alternative für dieses Projekt, aber ich glaube man erreicht in beiden Fällen ein gutes Resultat.

Beim Backend bzw. der API würde ich sagen NestJS, Nuxt oder auch verschiedene Libs in Golang oder gar ASP.NET sind deutlich "moderner" als PHP, bieten async und sind event-driven. Wenn man also auf der völlig grünen Wiese beginnt würde ich das auch in Erwägung ziehen - auch wenn JS/TS nicht mein Liebling ist und mir das im Frontend völlig ausreicht ;-) Aber auch das ist natürlich ein Stück Geschmackssache.

Neben der Technologie-Perspektive der LLMs würde ich aber hier ganz klar auch die menschliche Komponente berücksichtigen. Alex ist beispielsweise viel konventioneller als ich es bin. Wenn es nach ihm geht, dann so wenig JS wie möglich :-)

Deine Enttäuschung über das Zerschießen der UI kann ich sehr gut nachvollziehen und das würde ich gerne auch verbessern.

Ich weiß noch nicht wohin die Reise führen wird, was ich mir aber gut vorstellen könnte wäre eine Kombination aus dem was da ist, ein neues Fundament aus Symfony (oder Laravel) und eine modularere UI mittels Tailwind CSS. Meiner aktuellen Einschätzung nach wäre das ein guter Kompromiss um die PHP-Entwickler abzuholen, alles mehr zu strukturieren und zu modernisieren und eine moderne UI zu haben. So haben dann vielleicht möglichst viele Spaß an der Mitarbeit.

Aber die Diskussion hat jetzt doch immer weniger mit dem eigentlichen PR zu tun. Da das rework-Projekt sicherlich nicht kurzfristig "fertig" sein wird, sollten wir hier das Update auf PHP 8.5 zu Ende bringen und die Diskussion über die zukünftige Entwicklung von OpenXE vielleicht ins Forum verlagern. Da werden sich sicherlich noch weitere Entwickler einbringen und wir bekommen auch ein besseres Bild. Meine Aussagen zuvor sind ja auch überwiegend Vermutungen.

@exciler
Copy link
Copy Markdown

exciler commented Feb 6, 2026

Ich habe in #231 einen einfachen Pre-Upgrade-Check implementiert der als Voraussetzung für diesen PR ausreichen sollte

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants