AddOn-Versionen vergleichen
Quell-ID: GitHub Discussion #41
Use Case
In einem Modul oder AddOn soll geprüft werden, ob eine bestimmte Version eines anderen AddOns installiert ist.
Verwendete AddOns
- REDAXO Core
Problemstellung
Versionen im Semver-Format (z.B. “1.2.3”) können nicht einfach mit String-Vergleichen verglichen werden.
Lösung
REDAXO bietet die Funktion rex_version::compare():
<?php
$addon = rex_addon::get('my_addon');
// Prüfen ob Version größer als 1.2.3
if (rex_version::compare($addon->getVersion(), '1.2.3', '>')) {
// Code für neuere Versionen
}
// Prüfen ob Version mindestens 2.0.0
if (rex_version::compare($addon->getVersion(), '2.0.0', '>=')) {
// Neues Feature nutzen
}
Vergleichsoperatoren
| Operator | Bedeutung |
|---|---|
> |
größer als |
< |
kleiner als |
>= |
größer oder gleich |
<= |
kleiner oder gleich |
= oder == |
gleich |
!= oder <> |
ungleich |
Beispiele
Feature-Check basierend auf AddOn-Version
<?php
$yform = rex_addon::get('yform');
if ($yform->isAvailable()) {
if (rex_version::compare($yform->getVersion(), '4.0.0', '>=')) {
// Neue YForm 4.x API verwenden
$dataset = MyModel::create();
} else {
// Alte API für YForm 3.x
$dataset = rex_yform_manager_dataset::create('rex_my_table');
}
}
REDAXO Core-Version prüfen
<?php
if (rex_version::compare(rex::getVersion(), '5.15.0', '>=')) {
// Feature aus REDAXO 5.15+ nutzen
}
Mindestanforderung in package.yml
# package.yml
package: my_addon
version: 1.0.0
requires:
redaxo: ^5.14
php: ^8.0
yform: ^4.0
Besserer Ansatz
Versions-Helper-Klasse
<?php
class VersionHelper
{
/**
* Prüft ob ein AddOn in einer Mindestversion verfügbar ist
*/
public static function addonMinVersion(string $addonName, string $minVersion): bool
{
$addon = rex_addon::get($addonName);
if (!$addon->isAvailable()) {
return false;
}
return rex_version::compare($addon->getVersion(), $minVersion, '>=');
}
/**
* Prüft ob REDAXO in einer Mindestversion läuft
*/
public static function coreMinVersion(string $minVersion): bool
{
return rex_version::compare(rex::getVersion(), $minVersion, '>=');
}
/**
* Gibt eine Kompatibilitäts-Warnung aus
*/
public static function checkCompatibility(): ?string
{
$warnings = [];
if (!self::coreMinVersion('5.14.0')) {
$warnings[] = 'REDAXO 5.14.0 oder höher erforderlich';
}
if (!self::addonMinVersion('yform', '4.0.0')) {
$warnings[] = 'YForm 4.0.0 oder höher erforderlich';
}
return !empty($warnings) ? implode(', ', $warnings) : null;
}
}
// Verwendung
if ($warning = VersionHelper::checkCompatibility()) {
echo rex_view::warning($warning);
}
Feature-Flags basierend auf Version
<?php
class Features
{
public static function hasNewMediaManager(): bool
{
return rex_version::compare(rex::getVersion(), '5.13.0', '>=');
}
public static function hasYFormCallbackObject(): bool
{
$yform = rex_addon::get('yform');
return $yform->isAvailable() &&
rex_version::compare($yform->getVersion(), '4.0.0', '>=');
}
}
// Im Code
if (Features::hasNewMediaManager()) {
// Neue API nutzen
}
Hinweis
Die alte Funktion rex_string::versionCompare() ist seit REDAXO 5.10 deprecated. Verwenden Sie stattdessen immer rex_version::compare().