Migration auf QUIQQER v2
Damit du deine Module für QUIQQER v2 fit machst, musst du einige Anpassungen vornehmen. Hier sind die wichtigsten Änderungen, die in der v2 eingeführt wurden:
- Unterstützung für PHP 8
- Wechsel von
quiqqer/quiqqer
zuquiqqer/core
- Verwendung von UUIDs anstelle von IDs
- Einführung von Rückgabewerten in PHP (+ phpstan)
- Ersatz von
strftime
PHP 8
QUIQQER v2 wurde für PHP 8 entwickelt und unterstützt PHP 8.2 und höher. Das bedeutet, dein Code muss mit PHP 8.2 kompatibel sein.
quiqqer/core
Das Hauptpaket von QUIQQER hieß in Version 1 noch quiqqer/quiqqer
. Wenn du in deiner composer.json
quiqqer/quiqqer
als Abhängigkeit angegeben hast, musst du dies auf "quiqqer/core":"^2"
ändern.
UUIDs
QUIQQER v2 verwendet nun UUIDs anstelle einfacher Integer-IDs. Dies hat den Vorteil, dass es zu keinen ID-Kollisionen kommt und Probleme mit IDs auf mehreren Systemen vermieden werden.
Eine UUID ist eine ID, die als String gespeichert wird und von verschiedenen Faktoren wie Zeit und System abhängt. Sie sieht ungefähr wie folgt aus:
6c57e812-1dbf-11ef-9c7f-c85b76ed4752
Wenn dein Modul Nutzer- oder Gruppen-IDs verwendet, solltest du diese anpassen. Wichtig: Alle Standard-Controls, die mit Nutzern oder Gruppen zu tun haben, geben nun UUIDs anstelle von IDs zurück.
database.xml
:
Anpassung in der Alt:
<field type="int NOT NULL">user_id</field>
Neu:
<field type="VARCHAR(50) NOT NULL">user_id</field>
Zusätzlich solltest du alle Nutzer- und Gruppen-IDs in PHP und JavaScript anpassen. Das bedeutet, (int)
-Casts in PHP und parseInt()
in JavaScript müssen entfernt werden.
Rückgabewerte
Das QUIQQER v2 Core-Paket hat einige Automatisierungen und Prüfungen eingeführt, darunter PHPUnit und PHPStan. Ziel ist es, QUIQQER v2 während der Weiterentwicklung stabiler zu machen. Dafür wird ein hoher Standard angestrebt, wie ein PHPStan Level 8.
In v2 wurden alle PHP-Methoden vollständig überarbeitet und die Parametertypen sowie die Rückgabetypen festgelegt. Dies gilt vor allem für alle allgemeinen QUIQQER-Interfaces.
Implementieren deine PHP-Klassen verschiedene QUIQQER-Interfaces, bist du nun verpflichtet, die gleichen Rückgabewerte zu verwenden, wie sie von den Interfaces vorgegeben werden.
Im Folgenden zeigen wir einige Beispiele für bekannte Klassen bzw. Interfaces. Grundsätzlich solltest du bei deinem Modul jedoch für jeden Methodenparameter und jeden Methodenrückgabewert die Typen deklarieren.
Um eine vollständige Migration deines Codes durchzuführen, empfiehlt es sich, eine IDE wie PHPStorm zu verwenden. Diese unterstützt dich dabei, Rückgabewerte korrekt zu setzen und andere notwendige Anpassungen vorzunehmen.
QUI\Controls
Alt:
class Infinite extends QUI\Control
{
public function __construct($attributes = [])
{
// code
}
public function getBody()
{
// code
}
}
Neu:
class Infinite extends QUI\Control
{
public function __construct(array $attributes = [])
{
// code
}
public function getBody(): string
{
// code
}
}
strftime
Da strftime
in PHP 8 entfernt wurde, hast du zwei Möglichkeiten: Du schreibst deinen Code um und nutzt die neuen PHP 8 Date-Objekte, oder du nutzt das Modul php81_bc/strftime
. Dieses Modul bietet ein Fallback für die Funktion strftime
.
In den ERP-Modulen von QUIQQER wird dieses Modul verwendet, du kannst es also bedenkenlos auch für dein Modul nutzen.
QUIQQER Core Templates
Einige Templates überschreiben die HTML-Template-Dateien im QUIQQER Core Paket. Ein bekanntes Beispiel ist die Überschreibung der E-Mail-Templates im Template Cologne:
- body.html
- footer.html
- header.html
- meta.html
Die Ordnerstruktur im Template Cologne sieht in Version 1 wie folgt aus:
quiqqer/quiqqer/lib/templates/mail
Template Cologne Version 2 verwendet die folgende Ordnerstruktur:
quiqqer/core/src/templates/mail
In allen Templates (auch Kundentemplates), die früher die quiqqer/quiqqer
Template-Dateien überschrieben haben, muss die Ordnerstruktur für quiqqer/core
angepasst werden:
- alt:
quiqqer/quiqqer/lib
❌ - neu:
quiqqer/core/src
✅