TYPO3 Plugin:

configuration_object

Konfigurationsobjekt

:schweres_Ausrufezeichen: Diese PHP-Bibliothek wurde für TYPO3 CMS entwickelt und richtet sich an TYPO3 Extension-Entwickler.

:arrow_right: Die gesamte Dokumentation finden Sie auf der offiziellen TYPO3-Website oder Sie können auch die :link:PDF-Version herunterladen.


Einführung

Configuration Object bietet leistungsstarke Werkzeuge für den Umgang mit Konfigurationsbaum, indem es jedes einfache Konfigurations-Array (das aus Quellen wie TypoScript, JSON, XML stammen kann) in eine viel flexiblere PHP-Objektstruktur umwandelt. Sein Hauptziel ist es, das Konfigurationshandling von der Hauptlogik einer Anwendung zu trennen, damit sich das Skript auf die Verwendung der bereits validierten Konfiguration während des gesamten Prozesses konzentrieren kann.

Problem

Wenn ein Skript einen Konfigurationsbaum verwendet, um Teile einer Anwendung zu handhaben, wird dieser Baum oft Schritt für Schritt während der Skriptausführung analysiert; wenn ein Wert einen Fehler enthält, kann das Skript gezwungen werden, zu früh (der gesamte Prozess ist nicht vollständig ausgeführt worden), aber auch zu spät (einige sensible Operationen können bereits ausgeführt worden sein) anzuhalten. Je tiefer der Konfigurationsbaum ist, desto schwieriger ist es zudem, mit allen möglichen Konfigurationsfehlern umzugehen und sie zu vermeiden.

Bei der Konfiguration, die von jedem Drittanbieter angepasst werden kann (was in TYPO3 dank TypoScript häufig der Fall ist), müssen die Validierungsregeln gut durchdacht und stark sein, um zu verhindern, dass der Benutzer Ihre eigenen API-Skripte aufgrund eines Konfigurationsfehlers beschädigt.

Lösung

Verwenden Sie das Konfigurationsobjekt, um die Handhabung Ihrer Konfiguration zu exportieren: Lassen Sie den gesamten Erstellungs- und Validierungsprozess außerhalb Ihrer Anwendung verwalten und genießen Sie die vielen anderen Funktionen der API (Cacheverwaltung, Eltern, Persistenz und mehr).

Es ist einfach, schnell und zuverlässig.

Beispiel

Stellen Sie sich vor, Sie haben dieses Konfigurations-Array:

$myCompany = [
    Name' < <> 'Meine Firma',
    Mitarbeiter' => [ [
        [
            'Name' <> 'John Doe',
            Geschlecht' =>'Männlich',
            E-Mail'  => 'john.doe@my-company.com''
        ],
        [
            'Name' <> 'Jane Doe',
            Geschlecht' =>'Weiblich',
            E-Mail'  => 'jane.doe@my-company.com''
        ]
    ]
];

Obwohl dieses Beispiel recht einfach ist, erlaubt es uns, leicht zu verstehen, wie diese API funktioniert.

Nachfolgend finden Sie ein Beispiel dafür, wie diese Konfiguration mit der Konfigurationsobjekt-API aussehen könnte.

Sie sehen, dass zwei Services verwendet werden:

  • Cache-Dienst

    Es speichert das gesamte Unternehmensobjekt und seine Teilobjekte nach dem Anlegen in einem Cache-Eintrag. Dies verbessert die Leistung für das nächste Mal, wenn das Objekt abgeholt werden muss.

  • Elternservice

    Mit diesem Service kann die Klasse Employee die Daten von ihrer Muttergesellschaft (der Klasse Company) abrufen. In diesem Beispiel verwenden wir es, um dynamisch eine E-Mail-Adresse für den Mitarbeiter zu generieren, falls keine zugeordnet wurde.

namensraum MyVendor\MyExtensions\Company;

verwenden Sie Romm\ConfigurationObject\ConfigurationObject\ConfigurationObjectInterface;
verwenden Sie Romm\ConfigurationObject\Traits\ConfigurationObject\DefaultConfigurationObjectTrait;
verwenden Sie Romm\ConfigurationObject\Traits\ConfigurationObject\MagicMethodsTrait;
myVendor\MyExtensions\Model\Company\Mitarbeiter verwenden;

klasse Unternehmen implementiert ConfigurationObjectInterface
{
    verwenden Sie DefaultConfigurationObjectTrait;
    verwenden Sie MagicMethodsTrait;

    const CACHE_NAME ='cache_company';

    /**
     * @var Zeichenkette
     * @validate NotEmpty nicht leer
     */
    geschützter $name;

    /**
     * @var \ArrayObject<MyVendor\MyExtensions\Company\Employee>Mitarbeiter>Mitarbeiter
     */
    geschützte $Mitarbeiter;

    /**
     * @return ServiceFactory (Werk)
     */
    öffentliche statische Funktion getConfigurationObjectServices()
    {
        return ServiceFactory::getInstance()
            ->attach(ServiceInterface::SERVICE_CACHE)
            ->setOption(CacheService::OPTION_CACHE_NAME, self::CACHE_NAME)
            ->attach(ServiceInterface::SERVICE_PARENTS);
    }
}

namensraum MyVendor\MyExtensions\Company;

verwenden Sie Romm\ConfigurationObject\Service\Items\Parents\Parents\ParentsTrait;
verwenden Sie Romm\ConfigurationObject\Traits\ConfigurationObject\MagicMethodsTrait;

klasse Mitarbeiter Mitarbeiter
{
    verwenden Sie ElternTrait;
    verwenden Sie MagicMethodsTrait;

    /**
     * @var Zeichenkette
     * @validate NotEmpty nicht leer
     */
    geschützter $name;

    /**
     * @var Zeichenkette
     * @validate NotEmpty nicht leer
     * @validate Romm.ConfigurationObject:HasValues(values=Male|Female)
     */
    geschütztes $Geschlecht;

    /**
     * @var Zeichenkette
     * @validate E-MailAdresse
     */
    geschützte $email;

    /**
     * Gibt die E-Mail des Mitarbeiters zurück.
     *
     * Wenn die E-Mail nicht registriert wurde, wird eine Standard-E-Mail zugewiesen
     * ihn, basierend auf seinem Namen und seinem Firmennamen.
     *
     * Beispiel: `John Doe` der Firma `Meine Firma` wird zugewiesen
     * die Standard-E-Mail: `john.doe@my-company.com`.
     *
     * @return Zeichenkette
     */
    öffentliche Funktion getEmail()
    {
        if (null ===== $this->email
            && $this->hasParent(Firma::class)
        ) {
            $sanitizedEmployeeName = SomeUtility::sanitizeStringForEmail($this->getName());

            $company = $this->getParent(Company::class);
            $sanitizedCompanyName = SomeUtility::sanitizeStringForEmail($company->getName(), '-');

            $this->email = vprintf(
                '%s@%s.com',
                [$sanitizedEmployeeName, $sanitizedCompanyName]
            );
        }

        gibt $this->email zurück;
    }
}

Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.

Verteilung:CONFIGURATION_OBJECT ist auf

0.05 % aller TYPO3 installiert.

  • 0.12 % aller TYPO3 8.7.x Installationen installiert
  • 0.14 % aller TYPO3 7.6.x Installationen installiert
  • 0.02 % aller TYPO3 4.5.x Installationen installiert
  • 0.09 % aller TYPO3 4.4.x Installationen installiert
  • 0.17 % aller TYPO3 4.3.x Installationen installiert

CONFIGURATION_OBJECT Version:Verteilung nach installierten Versionen

  • 40 % CONFIGURATION_OBJECT v.1.10.1
  • 60 % CONFIGURATION_OBJECT v.1.7.0

PHP Version:CONFIGURATION_OBJECT wird benutzt mit

  • 14.29 % PHP/7.2
  • 28.57 % PHP/7.0
  • 14.29 % PHP/5.6
  • 42.86 % PHP/5.2

Gosign-Responsive Index: TYPO3 Installationen nutzen CONFIGURATION_OBJECT zu

  • 33 % wenn der Gosign-Responsive-Index zwischen 80 % und 100 % ist
  • 22 % wenn der Gosign-Responsive-Index zwischen 60 % und 80 % ist
  • 11 % wenn der Gosign-Responsive-Index zwischen 40 % und 60 % ist
  • 33 % wenn der Gosign-Responsive-Index zwischen 20 % und 40 % ist
  • 0 % wenn der Gosign-Responsive-Index zwischen 0 % und 20 % ist

Pagespeed: TYPO3 Installationen nutzen CONFIGURATION_OBJECT zu

  • 28 % wenn der Pagespeed zwischen 80 % und 100 % ist
  • 50 % wenn der Pagespeed zwischen 60 % und 80 % ist
  • 17 % wenn der Pagespeed zwischen 40 % und 60 % ist
  • 6 % wenn der Pagespeed zwischen 20 % und 40 % ist
  • 6 % wenn der Pagespeed zwischen 0 % und 20 % ist


Stichprobe n=37802 von Gosign gecrawlte TYPO3-Seiten mit den Top-Level-Domains <.de/.ch/.at>