Download the PHP package netgroup/datatransformationlayer without Composer

On this page you can find all versions of the php package netgroup/datatransformationlayer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package datatransformationlayer

Data Transformation Layer

PHP Contao

Eine schlanke Data Transformation Layer für Contao-Bundles: Du definierst Projections (ausgabespezifische Feld-Transformationen) und wendest sie effizient auf große Datenmengen an – inklusive Prefetching, um N+1-Queries zu vermeiden. Neben der Transformation bestehender Felder können auch neue berechnete Felder hinzugefügt und bestehende Felder entfernt werden.


Autor

NetGroup GmbH - Patrick Froch [email protected]


Support

NetGroup Gesellschaft für Informationstechnologien in Deutschland mbH
Kaiserstraße 67
44135 Dortmund

Kontakt:
Telefon: +49 231 557509-0
Telefax: +49 231 557509-99
E-Mail: [email protected]

Internet: https://www.netgroup.de/userguide.html


Inhalt


Motivation

In realen Contao-Projekten werden Daten häufig über komplexe DBAL-Abfragen geladen. Bevor die Daten ausgegeben werden können (Twig-Templates, Exporte, APIs), müssen Werte oft transformiert werden:

Ohne klare Trennung der Verantwortlichkeiten wird diese Logik häufig über Controller, Templates und Repositories verteilt. Das führt schnell zu:

Lösung: Dieses Paket liefert eine Projection-basierte Transformation Layer:

Dadurch bleiben DBAL-Queries sauber, Ausgabelogik ist explizit und wiederverwendbar, und große Datenmengen können effizient verarbeitet werden.


Features


Voraussetzungen


Installation

Installation per Composer in deinem Contao-Projekt:

Alternativ kannst du das Paket (netgroup/datatransformationlayer) über den Contao Manager installieren.


Konfiguration (Symfony Services)

services.yaml (Beispiel)

Lege die Datei config/services.yaml in deinem Bundle an (oder ergänze sie):

(Pfade müssen ggf. angepasst werden.)


Quickstart

  1. Projection-Klasse erstellen (z. B. member_list)
  2. Converter-Klassen erstellen (z. B. Datum formatieren, Lookups)
  3. Optional: Berechnete Felder hinzufügen (addField) oder Felder entfernen (removeField)
  4. DBAL-Resultset mit DatasetTransformer transformieren

Benutzung

1) Projection erstellen

Eine Projection definiert welche Felder für eine bestimmte Ausgabe transformiert werden sollen.

Beispiel: MemberListProjection transformiert:


2) Converter erstellen

Converter implementieren FieldConverterInterface. Sie erhalten:

Beispiel A: Datum formatieren (DateTimeFormatConverter)

Beispiel B: Fullname aus tl_member bauen (MemberFullnameConverter)

Dieser Converter zeigt bewusst ein Pattern, das in DBAL-Readmodels häufig ist: Der Converter kann auch dann funktionieren, wenn er nur die Row bekommt (kein Lookup nötig).


3) Transformer anwenden

In deinem Controller/Service lädst du Daten per DBAL und transformierst sie mit dem Transformer.


4) Prefetching (N+1 vermeiden)

Wenn ein Converter Lookup-Daten benötigt (z. B. pid -> Titel aus tl_page oder IDs zu Labels), implementiere PrefetchingConverterInterface.

Prinzip:

Beispiel: PageTitleLookupConverter (Lookup tl_page.id -> tl_page.title)


5) Felder hinzufügen (Additions)

Mit addField() können neue, berechnete Felder zum Output hinzugefügt werden, ohne bestehende Felder zu verändern. Das ist nützlich, wenn:

API

Beispiel: Berechnetes Feld mit Quellfeld

Ergebnis: Jede Row enthält nun zusätzlich formatted_price. Das Originalfeld price bleibt unverändert erhalten.

Beispiel: Berechnetes Feld ohne Quellfeld

Wenn der Converter seinen Wert vollständig aus der gesamten Row berechnet (via $row-Parameter), kann sourceField weggelassen werden. Der Converter erhält dann null als $value.

Beispiel: Mehrere compute()-Schritte verketten

compute() unterstützt Fluent Chaining – der Rückgabewert des ersten Converters wird als Eingangswert des zweiten verwendet:

Hinweis: Additions werden vor den regulären Feld-Konvertierungen ausgeführt. Dadurch haben Addition-Converter Zugriff auf die original Feldwerte in $row. Werte wie Ids stehen also für das Hinzufügen noch zur Verfügung.


6) Felder entfernen (Removals)

Mit removeField() können Felder aus dem Output entfernt werden. Das ist nützlich, wenn:

API

removeField() gibt $this zurück und unterstützt Fluent Chaining:

Beispiel

Hinweis: Removals werden nach den Additions und den regulären Feld-Konvertierungen ausgeführt. Dadurch kann ein Feld zunächst als Quellwert für eine Addition oder Konvertierung dienen und anschließend entfernt werden.


7) Kombiniertes Beispiel

Ein typischer Use Case: Aus quantity und unit_price wird ein berechnetes Feld total_price erzeugt, und die technischen Felder werden anschließend entfernt.

Input:

Output:

Ausführungsreihenfolge

Der DatasetTransformer führt die drei Operationstypen in einer festen Reihenfolge aus:

  1. Add – Neue berechnete Felder hinzufügen (Additions)
  2. Convert – Bestehende Felder transformieren (Wert-Pipeline)
  3. Remove – Felder aus dem Output entfernen (Removals)

Diese Reihenfolge stellt sicher, dass:


Helper

ArrayColumnSorter

Für das Sortieren der Spalten der Ergbenissmenge steht der ArrayColumnSorter zur Vefügung. Er erhält das Array mit den konvertierten Daten, sowie ein Array mit den Spaltennamen in der Reiehnfolgen, in der das Datenarray sorteirt werden soll.

Die Methode gibt das folgende Array zurück:


Fehler- & Null-Policy

Damit Ausgaben stabil und vorhersehbar sind, sollte im Projekt eine klare Policy gelten. Dieses Paket ist bewusst flexibel; du solltest dich aber explizit für ein Verhalten entscheiden.

Empfohlene Default-Policy

Empfehlung für Exporte/APIs

Für Exporte oder APIs ist null manchmal unpraktisch. Typische Alternativen:

Tipp: Wenn ihr mehrere Ausgaben habt (Liste vs. Export), löst ihr das sauber über verschiedene Projections.


Architektur (kurz)

Das Paket trennt bewusst drei Ebenen:

  1. Query Layer (DBAL / Read Model)

    • Liefert rohe Arrays (z. B. fetchAllAssociative()).
    • Keine Formatierung/Lookup-Logik.
  2. Transformation Layer (Projections + Converter)

    • Eine Projection definiert Transformationsregeln pro Ausgabe (Liste/Export/API).
    • Converter sind kleine, wiederverwendbare Bausteine.
    • Prefetching verhindert N+1.
    • Additions erzeugen neue berechnete Felder.
    • Removals entfernen nicht benötigte Felder aus dem Output.
  3. Presentation Layer (Twig/JSON/Export)
    • Bekommt „ready-to-display“ Daten.
    • Keine DB-Lookups mehr nötig.

Lexikon (Begriffe)


Testing & Quality

Dieses Projekt ist für saubere Softwarequalität ausgelegt und kann u. a. mit folgenden Tools abgesichert werden:

CI läuft typischerweise in GitLab CI (nicht öffentlich einsehbar).


Contributing

Beiträge sind willkommen:

  1. Fork erstellen
  2. Feature-Branch anlegen (feature/...)
  3. Änderungen mit Tests/Analyse absichern
  4. Merge Request eröffnen

Bitte achte auf:


Lizenz

Dieses Projekt ist unter der Apache License 2.0 lizenziert. Siehe LICENSE.


All versions of datatransformationlayer with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
contao/core-bundle Version ^4.13 | ^5.3
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package netgroup/datatransformationlayer contains the following files

Loading the files please wait ...