OpenXE/classes/Modules/SystemConfig/docs/index.md
2021-05-21 08:49:41 +02:00

6.3 KiB
Raw Blame History

SystemConfig

Neue SystemConfig-Instanz erzeugen

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');

Validierung von Namespace und Key

Namespace und Key dürfen nur folgende Zeichen enthalten:

  • Buchstaben im lowercase
  • Zahlen
  • Unterstriche

Alle anderen Zeichen sind nicht erlaubt und führen zu einer InvalidArgumentException.
Zusätzlich darf die Anzahl der Zeichen von Namespace + Key nicht größer als 244 sein, da sonst ebenso eine InvalidArgumentException geworfen wird.

Maximale Wertgröße

Die maximale Größe eines zu speichernden Wertes ist 64kB.

Wert speichern

Für die Speicherung eines Wertes werden ein Namespace und Key benötigt.
Der Namespace ist der Modulname, für den die Konfiguration gespeichert werden soll. Der Key kann frei gewählt werden.
Wenn ein Namespace-Key Paar beim Speichern noch nicht in der Datenbank existiert, wird es neu erstellt.

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');
$namespace = 'report';
$key = 'last_value_of_element_1';
$value = 'checked';

$systemConfig->setValue($namespace, $key, $value);

Wert auslesen

Für das Auslesen eines Wertes werden wieder der Namespace und Key benötigt. Es stehen zwei Funktionen zur Auswahl: getValue() sowie tryGetValue().
Falls kein Wert zu einem gegeben Namespace-Key Paar gefunden werden konnte, wirft die getValue() ConfigurationKeyNotFoundException. Die Funktion tryGetValue() gibt in so einem Fall den optionalen default Parameter zurück.

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');
$namespace = 'report';
$key = 'last_value_of_element_1';

$value = $systemConfig->tryGetValue($namespace, $key, 'fallback');

try {
    /** @var string $response */
    $value = $systemConfig->getValue($namespace, $key);
} catch (\Xentral\Modules\SystemConfig\Exception\InvalidArgumentException $exception) {
    // Für das Namespace-Key Paar existiert noch kein Eintrag in der Datbenank
}

Schlüssel auf Existenz prüfen

Es ist möglich Schlüssel auf Existenz zu prüfen.

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');
$namespace = 'report';
$key = 'last_value_of_element_1';

$keyExists = $systemConfig->isKeyExisting($namespace, $key);

Datenbankeintrag löschen

Bei Bedarf können Schlüssel samt Wert aus der Datenbank entfernt werden.

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');
$namespace = 'report';
$key = 'last_value_of_element_1';

$systemConfig->deleteKey($namespace, $key);

Serialisierung von Objekten

Es ist möglich für ein Modul je ein Konfigurationsobjekt zu speichern. Dazu muss das SystemConfigSerializableInterface implementiert werden.

<?php

declare(strict_types=1);

use Xentral\Modules\SystemConfig\Interfaces\SystemConfigSerializableInterface;

final class ExampleSystemConfig implements SystemConfigSerializableInterface
{
    /** @var string|null $voucherArticle */
    private $voucherArticle = null;

    /** @var int $codeLength */
    private $codeLength = 8;

    /**
     * @return string
     */
    public static function getSystemConfigNamespace(): string
    {
        return 'example';
    }

    /**
     * @return string
     */
    public static function getSystemConfigKey(): string
    {
        return 'voucher_settings';
    }

    /**
     * @return bool
     */
    public function hasVoucherArticle(): bool
    {
        return !is_null($this->voucherArticle);
    }

    /**
     * @return string|null
     */
    public function getVoucherArticle(): ?string
    {
        return $this->voucherArticle;
    }

    /**
     * @return int
     */
    public function getCodeLength(): int
    {
        return $this->codeLength;
    }

    /**
     * @param string|null $voucherArticle
     *
     * @throws InvalidArgumentException
     */
    public function setVoucherArticle(?string $voucherArticle): void
    {
        if (is_string($voucherArticle) && empty(trim($voucherArticle))) {
            throw new InvalidArgumentException('Gutschein-Artikelnummer darf kein Leer-String sein.');
        }
        $this->voucherArticle = $voucherArticle;
    }

    /**
     * @param int $codeLength
     *
     * @throws InvalidArgumentException
     */
    public function setCodeLength(int $codeLength): void
    {
        if ($codeLength < 6) {
            throw new InvalidArgumentException('Mindestlänge für Gutschein-Codes sind sechs Zeichen.');
        }
        $this->codeLength = $codeLength;
    }

    /**
     * @return array
     */
    public function toArray(): array
    {
        return [
            'voucher_article' => $this->voucherArticle,
            'code_length'     => $this->codeLength,
        ];
    }

    /**
     * @param array $data
     *
     * @throws InvalidArgumentException
     *
     * @return self
     */
    public static function fromArray(array $data): SystemConfigSerializableInterface
    {
        $instance = new self();

        if (isset($data['voucher_article'])) {
            $instance->setVoucherArticle($data['voucher_article']);
        }
        if (isset($data['code_length'])) {
            $instance->setCodeLength($data['code_length']);
        }

        return $instance;
    }
}

Objekte speichern

Das Objekt kann anschließend über die setObject() Funktion gespeichert werden.

$object = new ClassThatUtilizesSystemConfig([1,'a', 'b' => 'c']);

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');

$systemConfig->setObject($object);

Objekte laden

Die getObject() Funktion liefert ein Object der übergebenen Klasse. Sollte für die Klasse noch keine Konfiguration gespeichert worden sein, sprich der Schlüssel noch nicht in der Datenbank existieren, wird eine ConfigurationKeyNotFoundException geworfen.

/** @var \Xentral\Modules\SystemConfig\SystemConfigModule $config */
$systemConfig = $container->get('SystemConfigModule');

$object = $systemConfig->getObject(ClassThatUtilizesSystemConfig::class);