Von der Datenbank zum Model

Datenhandling in TYPO3 Extensions

Gerade für den Anfänger ist es schwierig zu verstehen, wie hier eigentlich die Zusammenhänge bestehen. Es gibt zwar zig verschiedene Hinweise im Netz, was wo einegtragen werden muss, allerdings vermisse ich dort oft das warum.

Man muss sicherlich nicht tief den TYPO3 Core in jedem Detail verstehen um erfolgreich Extensions schreiben zu können, aber es Bedarf auch mehr als nur stupide irgendwelche Snippets zu kopieren ohne die Basics zu verstehen. Eine vereinfachte Darstellung der Zusammenhänge:

Schauen wir uns nun die Dateien etwas näher an:


Die ext_tables.sql

In dieser Datei werden alle Tabellen mit den Datenbankfeldern und entsprechender Definition aufgeführt. Das ist also nichts anderes als eine mysql Definition. Der einzige Unterschied besteht darin, das TYPO3 automatsich bei der EXT Installation prüft ob diese Tabelle und Felder/Felddefinitionen schon vorhanden sind.

Damit Extbase mit euren Datensätzen überhaupt etwas anfangen kann, wird zwingend ein UID Feld in jeder Tabelle benötigt. Details zur ext_tables.sql findet ihr hier: Tutorial EXT Entwicklung


Die ext_tables.php und ext_localconf.php

Beide Dateien werden in die globale tables und config Datei includiert und vom System gecached. Wenn Ihr also dort im Laufe eurer Entwicklung Änderungen durchführt, muss auf jeden Fall der Systemcache gelöscht werden. Das geht entweder über das Installtool oder die EXT de- und wieder installieren. Die System Cache Löschung im Backend reicht nach meiner Erfahrung nicht aus.


ext_tables.php
Zunächst sollte hier eine Zeile rein die bewirkt das ihr euer Setup im Root Template inkludieren könnt.

/***************
 * Default TypoScript
 */
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
    $_EXTKEY, 'Configuration/TypoScript', 'Meine Extension'
);

Jedes Plugin oder Modul eurer Extension muss hier ebenfalls registriert werden:

/*******************
 * register Plugins
 */
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    $_EXTKEY, 'slide', 'Slider'
);

Wie ihr eigene Backendmodule und Modulgruppen registriert könnt ihr hier nachlesen: Backendmodule registrieren.

ext_localconf.php

In der ext_localconf muss nun noch euer Plugin konfiguriert werden. Damit sagt Ihr dem System welcher Controller bei diesem Plugin aufgerufen werden soll und welche Funktionen erlaubt sind:

/***************
 * Plugin configuration
 */
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'MyVendor.' . $_EXTKEY,
    'myextkey',
    array('Contentelements' => 'meineControllerFunktionOhneAction, zweiteFunktion'),
    array('Contentelements' => ''), //Funktionen die nicht gecached werden
 );

Für eine einfache Extension reichen diese Einträge schon.
Hinweis:
Weder die ext_tables noch die local_conf in den Beispielen beeinflussen die Daten aus der Datenbank direkt. In den genannten Beispielen wurden nur die Grundvoraussetzungen geschaffen, um über ein Plugin die Daten überhaupt anzusprechen zu können.


Die TCA Dateien (Tables Configuration Array)

Für jede Tabelle die Ihr in der ext_tables.sql neu angelegt habt, muss eine Datei angelegt werden. Damit Dateien TYPO3 automatsch berücksichtigt, müssen diese im folgendem Verzeichnis liegen:

typo3conf/ext/my_extension/Configuration/TCA/

Der Dateiname setzt sich aus dem Tabellennamen zusammen, zum Beispiel:

tx_myextension_domain_model_mytable.php

Nur wenn ihr diese schreibweise befolgt, kann TYPO3 die Felder auf das Model mappen.

Innerhalb des TCA wird jedes Feld innerhalb der "columns" section definiert. Dort werden auch Relationen zu anderen Tabellen angegeben. Neben dem Mapping zum Model konfiguriert ihr in der TCA ebenfalls die TYPO3 Standard Backendformulare. Die Labels, Typen und Größen werden direkt in der columns section bei jedem Feld erstellt. Mittels der "types" und "pallets" section bestimmt ihr das Aussehen und die Reihenfolge im Backendformular. Eine detaillierte Beschreibung des TCAs könnt ihr hier nachlesen: Das TCA im Detail.

Wenn ihr die Dateien bis zu diesem Abschnitt alle angelegt habt, könnt ihr eure Extension installieren und im Backend erste Datensätze erfassen.


Die Models

Kommen wir nun endlich zu den Models...

Innerhalb des Extbase Models wird der Inhalt eines Datenbankfeldes zum Objekt. Dafür deklarieren wir jedes Feld mit dem entsprechendem Format und einer optionalen Validierung. Zusätzlich benötigen wir einen getter um die Daten aus diesem Objekt auszulesen. Wenn wir Daten innerhalb der Extbaseextension auch speicher wollen, brauchen wir zusätzlich einen setter. Beispiel für ein einfaches Textfeld:

    /**
     * title
     *
     * @var \string
     */
    protected $title;

    function getTitle() {
        return $this->title;
    }

    function setTitle($title) {
        $this->title = $title;
    }

Hinweis: solange wir die Daten über die standard Backendformulare erfassen, brauchen wir keine setter!

Die Objetdefinitionen stehen innerhalb einer Model Klasse. Diese sieht in der Regel so aus:

<?php
namespace MyVendor\MyExtension\Domain\Model;
/*
 * Copyright Infos
 */

class MyTable extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
 
... Objectdefinition, getter und setter

}

Auch hier muss wieder das Verzeichnis beachtet werden, damit TYPO3 die Models auch finden:

typo3conf/ext/my_extension/Classes/Domain/Model/

Weitere Infos zu Modesl findet ihr auch hier im ausführlichem Tutorial: Models & Repositories


Repository

Zu guter Letzt noch ein einfaches Repository anlegen, damit stehen direkt ein paar Standardqueries im Controller zur Verfügung (z.B. findAll).

Die Repositories müssen im Verzeichnis

typo3conf/ext/my_extension/Classes/Domain/Repository/

angelegt werden. Der Dateiname setzt sich aus dem Modelnamen und "Repository" zusammen. Eine einfache Klasse sieht so aus:

<?php
namespace MyVendor\MyExtension\Domain\Repository;
/*
 * Copyright Infos
 */

class MyTableRepository extends extends \TYPO3\CMS\Extbase\Persistence\Repository {
 

}

Damit können wir nun endlich mit unseren Tabellendaten in Extbase Controllern arbeiten.

Das ganze ist hier nur ein grober Überblick, aber reduziert auf die wesentlichen Bestandteile werden euch viellecht so die Zusammenhänge klarer.

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

Git. Verteilte Versionsverwaltung für Code und Dokumente

Das Buch richtet sich an Einsteiger und erfahrene Benutzer die ihre Kenntnisse vervollständigen wollen. Klar strukturiert, mit vielen Beispielen aus der Praxis, hilft das Buch die Funktionsweise von GIT zu verstehen und erklärt alle nötigen Befehele. Für Entwickler unbedingt empfehlenswert.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.