Hmm, interessiert das hier denn jetzt noch jemanden? Ich habe tatsächlich etwas zusammenbekommen, wie gesagt vor allem als Übung für die Symfony Components, werde das auch unabhängig von dem "Quiz" noch etwas weiter bearbeiten. Ziel war ein schlankes, leicht integrierbares und vor allem erweiterbares Gästebuch. Es wird kein Framework benutzt, allerdings auf folgede Komponenten zurückgegriffen:
- Symfony: sfServiceContainer für Dependency Injection
- Symfony: sfEvent für Plugins
- Symfony: sfYaml für Konfiguration
- eigene: OutputFilter zum Filtern von Daten im View
- eigene: DecorateAnything als generischer Dekorator für Plugins
- eigene: TypeSafeEnum als Enum-Datentyp
Die gesamte Lösung gibt es hier (Plugins und Installationsroutine sind noch nicht implementiert, dies sprengt aber auch den Rahmen der Aufgabe):
SlimGb at master from schmengler's SlimGb - GitHub
Ein Beispiel zur Einbindung (voll funktionsfähig):
Allgemeine Konfiguration (application.link muss auf jeden Fall angepasst werden, damit die Pagination funktioniert!):
Sourcecode: SlimGb/conf/SlimGb.yaml
Service-Konfiguration (hier wird die Datenquelle bestimmt, siehe imports-Abschnitt)
Sourcecode: SlimGb/conf/Services.yaml
Datenquellen-Konfiguration:
Sourcecode: SlimGb/datasources/pdo.yaml.php
Sourcecode: SlimGb/datasources/csv.yaml.php
Als Standard ist CSV eingestellt, dafür gibt es erstmal nichts zu konfigurieren, auch eine Datei ist schon angelegt, so ist keine weitere Installation nötig, lediglich das runtime-Verzeichnis muss von PHP beschrieben werden dürfen.
Edit: Ach ja, zum zentralen Punkt, den Datenquellen:
- Sourcecode, Interface: SlimGb/core/SlimGb/Service/DataSource.php
- Sourcecode, Implementierung für CSV: SlimGb/core/SlimGb/Service/DataSourceCSV.php
- Sourcecode, Implementierung für PDO: SlimGb/core/SlimGb/Service/DataSourcePDO.php
Hier ist übrigens einmal eine Demo-Installation:
https://demo.linuxkind.de/slimgb/
Hier ein Klassendiagramm der wesentlichen Klassen:
Farben:
hellgelb: keine bes. Bedeutung
dunkelgelb: entscheidende Klassen für die Datenhaltung
dunkelgrau: Anwendung (Fassade)
hellgrau: Konfiguration (DI Container etc.)
weiß: nur relevant für Plugins

Uploaded with ImageShack.us
- Symfony: sfServiceContainer für Dependency Injection
- Symfony: sfEvent für Plugins
- Symfony: sfYaml für Konfiguration
- eigene: OutputFilter zum Filtern von Daten im View
- eigene: DecorateAnything als generischer Dekorator für Plugins
- eigene: TypeSafeEnum als Enum-Datentyp
Die gesamte Lösung gibt es hier (Plugins und Installationsroutine sind noch nicht implementiert, dies sprengt aber auch den Rahmen der Aufgabe):
SlimGb at master from schmengler's SlimGb - GitHub
Ein Beispiel zur Einbindung (voll funktionsfähig):
PHP-Code:
<?php
header('Content-type:text/html;charset=utf-8');
date_default_timezone_set('Europe/Berlin');
require_once 'SlimGb.inc.php';
$gb = new SlimGb();
$gb->initGuestbook();
?><html>
<head>
<title>SlimGb Demo</title>
<link rel="stylesheet" href="static/SlimGb.css">
</head>
<body>
<?php echo $gb->include_messages(); ?>
<?php echo $gb->include_form(); ?>
<?php echo $gb->include_pagination(); ?>
<?php echo $gb->include_entries(); ?>
<?php echo $gb->include_pagination(); ?>
</body>
</html>
Sourcecode: SlimGb/conf/SlimGb.yaml
Service-Konfiguration (hier wird die Datenquelle bestimmt, siehe imports-Abschnitt)
Sourcecode: SlimGb/conf/Services.yaml
Datenquellen-Konfiguration:
Sourcecode: SlimGb/datasources/pdo.yaml.php
Sourcecode: SlimGb/datasources/csv.yaml.php
Als Standard ist CSV eingestellt, dafür gibt es erstmal nichts zu konfigurieren, auch eine Datei ist schon angelegt, so ist keine weitere Installation nötig, lediglich das runtime-Verzeichnis muss von PHP beschrieben werden dürfen.
Edit: Ach ja, zum zentralen Punkt, den Datenquellen:
- Sourcecode, Interface: SlimGb/core/SlimGb/Service/DataSource.php
- Sourcecode, Implementierung für CSV: SlimGb/core/SlimGb/Service/DataSourceCSV.php
- Sourcecode, Implementierung für PDO: SlimGb/core/SlimGb/Service/DataSourcePDO.php
Hier ist übrigens einmal eine Demo-Installation:
https://demo.linuxkind.de/slimgb/
Hier ein Klassendiagramm der wesentlichen Klassen:
Farben:
hellgelb: keine bes. Bedeutung
dunkelgelb: entscheidende Klassen für die Datenhaltung
dunkelgrau: Anwendung (Fassade)
hellgrau: Konfiguration (DI Container etc.)
weiß: nur relevant für Plugins

Uploaded with ImageShack.us
Kommentar