connectionManager
Zweck des connectionManagers ist es, eine Konvention zu definieren, wie die Konfiguration und
Implementierung einer Datenbank-Zugriffsschnittstelle gestaltet sein soll. Idealerweise
ermöglicht diese Vorgehensweise einen einfachen Austausch einer Treiberschicht gegen eine andere
um von einer Datenbank zur anderen zu wechseln.
Trotz, dass dieser Ansatz hinsichtlich der Unterschiede zwischen Datenbanken sehr ambitioniert ist,
vereinheitlicht er dennoch die API und schafft ein gemeinsames Verständnis für den Zugriff
der Datenschicht einer Applikation auf die Datenbank-Treiberschicht.
Der
connectionManager fungiert als Factory für konkrete Implementierungen
eines Datenbanktreibers. Um den gewünschte Treiber laden zu können, muss dieser
zunächst konfiguriert werden. Die geschieht in der Konfigurationsdatei
Code
/config/core/database/{CONTEXT}/{ENVIRONMENT}_connections.ini
Details zu Konfigurationsdateien können dem Kapitel
Konfiguration entnommen werden. Die
Konfigurationsdatei enthält je eine Sektion für einen Treiber:
APF-Konfiguration
[Sektionsname]
DB.Host = ""
DB.User = ""
DB.Pass = ""
DB.Name = ""
[DB.DebugMode = "true|false"]
Der
Sektionsname dient als Referenz für die Erstellung der Treiber-Instanz,
DB.Host beinhaltet den Hostnamen des Datenbank-Server,
DB.User und
DB.Pass die Authentifizierungsdaten und
DB.Name benennt die zu
verwendende Datenbank.
DB.Type dient zur Definition des zur verwendenen Treibers
und
DB.DebugMode entscheidet, ob der Debug-Modus des Treibers aktiviert werden soll
oder nicht.
Der Debug-Modus kann dazu genutzt werden, das aktuell ausgeführte Statement auszugeben.
Alternativ dazu kann der optionale Parameter
$logStatement der Methoden
executeStatement() und
executeTextStatement() genutzt werden um das aktuell
ausgeführte Statement in eine Log-Datei zu schreiben. Details zur Funktion können der
API-Dokumentation entnommen werden.
Um den
connectionManager einsetzen zu können muss dieser zunächst per
PHP-Code
import('core::database','connectionManager');
eingebunden werden. Anschließend kann per
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager');
$DBTreiber = &$cM->getConnection('Sektionsname');
eins Instanz eines Datenbank-Treibers erzeugt werden.
Gemäß der Definition der abstrakten Klasse
AbstractDatabaseHandler
können weitere Datenbank-Abstraktions-Klassen hinzugefügt werden. Um diese mit dem
connectionManager verwenden zu können, müssen diese im Namespace
core::database abgelegt werden und von der Klasse
AbstractDatabaseHandler ableiten.
Das Framework liefert zwei Treiberschichten mit:
- MySQLx: MySQL-Treiberschicht. Setzt auf die mysql_*-Funktionen auf
- SQLite: SQLite-Treiberschicht. Setzt auf die sqlite_*-Funktionen. Hier ist PHP > 5.0.0 notwendig!
Um eine Instanz des MySQL-Treibers erstellen zu können, ist folgende Konfiguration notwendig:
APF-Konfiguration
[MySQL]
DB.Host = "host"
DB.User = "user"
DB.Pass = "pass"
DB.Name = "name"
DB.Type = "MySQLx"
[DB.DebugMode = "true|false"]
[DB.Charset = ""]
[DB.Collation = ""]
Die Parameter
DB.Charset und
DB.Collation dienen dazu, den
Zeichensatz und die
Zeichenbehandlung der MySQL-Verbindung zu definieren. Mit dem
Parameter
DB.Charset werden die MySQL-Variablen
- character_set_client
- character_set_connection
- character_set_results
gesetzt,
DB.Collation beeinflusst
- collation_connection
- collation_database
Die beiden Parameter sind optional und können bei Bedarf auch wechselseitig gesetzt werden, das
Vorhandensein beider ist nicht erforderlich.
Anschließend kann die Treiber-Instanz mit den Code-Zeilen
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager');
$MySQL = &$cM->getConnection('MySQL');
erzeugt werden. Die Treiberschicht wird aus Performance-Gründen dabei immer als Singleton-Objekt
erstellt.
Eine SQLite Treiberschicht kann mit dem Konfigurationseintrag
APF-Konfiguration
[SQLite]
DB.Name = "/path/to/my/database.sqlite"
DB.Type = "SQLite"
DB.DebugMode = "true|false"
und den Code-Zeilen
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager');
$SQLite = &$cM->getConnection('SQLite');
instanziiert werden. Bitte beachten Sie, dass im Fall von SQLite Host, User und Passwort nicht
konfiguriert werden müssen, da SQLite eine integrierte Datenbank-Engine ist.
Kommentare
Bitte geben Sie Ihren Kommentar hier ein. Füllen Sie alle mit * gekennzeichneten Felder vollständig und korrekt aus. Um zum Artikel zurückzukehren klicken sie bitte
hier. Zur Formatierung des Textes können folgende BBCode-ähnliche die Zeichen verwendet werden:
- [b]..[/b]: fett
- [i]..[/i]: kursiv
- [u]..[/u]: unterstrichen
Hinweis: Formatierungszeichen in Name und E-Mail-Adresse werden nicht akzeptiert.