Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step01:start [20.06.2021 14:22] – [Refactoring des bisherigen Beispielplugins] sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step01:start [24.06.2021 09:52] (aktuell) – sbel | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
* Benutzer sollen die Liste ihrer Einträge angezeigt bekommen. | * Benutzer sollen die Liste ihrer Einträge angezeigt bekommen. | ||
- | ===== Datenbankmodell: ===== | + | ===== Ein erstes |
Ein einfaches Datenbankmodell könnte zunächst so aussehen: | Ein einfaches Datenbankmodell könnte zunächst so aussehen: | ||
Zeile 20: | Zeile 20: | ||
Erstelle Tabellen in deiner Datenbank, die dieses Modell abbilden. | Erstelle Tabellen in deiner Datenbank, die dieses Modell abbilden. | ||
- | ===== Objektorientierter Datenbankzugriff reloaded | + | ===== Mehr Klassen bitte ===== |
Wenn man nun über die OOM unseres Projekts nachdenkt, macht es zunächst Sinn, dass man zwei Klassen verwenden möchte: | Wenn man nun über die OOM unseres Projekts nachdenkt, macht es zunächst Sinn, dass man zwei Klassen verwenden möchte: | ||
Zeile 36: | Zeile 36: | ||
* Warum könnte das das hinsichtlich der Erweiterbarkeit des Projekts ungeschickt sein, so zu beginnen? | * Warum könnte das das hinsichtlich der Erweiterbarkeit des Projekts ungeschickt sein, so zu beginnen? | ||
- | ==== Refactoring des bisherigen Beispielplugins ==== | + | ===== Refactoring des bisherigen Beispielplugins |
- | Um deinen Plugin-Code besser zu strukturieren, | + | Um deinen Plugin-Code besser zu strukturieren |
- | * | + | * |
< | < | ||
Zeile 46: | Zeile 46: | ||
</ | </ | ||
- | * Lege ein Unterverzeichnis '' | + | * Lege ein Unterverzeichnis '' |
- | * Verschiebe die Datei mit deiner Datenbank-Klasse in diesen Ordner und benne sie um in '' | + | * Verschiebe die Datei mit deiner Datenbank-Klasse in diesen Ordner und benenne |
* Passe das '' | * Passe das '' | ||
+ | * Teste, ob der bisherige Stand der Entwicklung noch immer funktioniert. | ||
+ | |||
+ | ==== Automatisches Laden benötigter Klassendefinitionen ==== | ||
+ | |||
+ | Wenn künftig weitere Klassendefinitionen zu unserem Projekt hinzukommen, | ||
+ | |||
+ | Man kann das durch einen " | ||
+ | |||
+ | * Alle Klassen (und Interfaces) müssen in einer Datei '' | ||
+ | * Die in den Dateien definierten Klassen müssen genau so heißen, wie die Dateien. Man darf also nicht die Klasse '' | ||
+ | |||
+ | Wenn man sich an diese Regeln hält kann man anstelle des '' | ||
+ | |||
+ | <code php> | ||
+ | // Klassendateien mit Hilfe eine anonymen Funktion als | ||
+ | // Autoloader einbinden | ||
+ | spl_autoload_register(function ($class) | ||
+ | { | ||
+ | // DokuWiki arbeitet stets in seinem DocRoot, wir suchen die Dateien | ||
+ | // aber in einem UVZ des Plugin-Verzeichnisses -anpassen wenn das | ||
+ | // Plugin nicht " | ||
+ | $plugin_dir=DOKU_PLUGIN . "/ | ||
+ | |||
+ | // Wenn eine Klasse oder ein Interface noch nicht existiert | ||
+ | // soll versucht werden, die passende Datei zu laden. | ||
+ | if(!class_exists($class) or !interface_exists($class)) | ||
+ | { | ||
+ | $file = $plugin_dir . ' | ||
+ | // Wenn die Datei nicht existiert, Fehler ausgeben. | ||
+ | if(!file_exists($file)) | ||
+ | die (' | ||
+ | // Wenn die Datei existiert, laden | ||
+ | require_once($file); | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | Ersetze das Include-Statement durch den Code oben und versuche zu verstehen, was dieser macht. | ||
+ | |||
+ | Teste ob der Code tatsächlich automatisch Klassendateien nachlädt, indem du einen Fehlerfall, erzeugst: versuche dazu ein Objekt zu erzeugen, für das es keine Klassendefinition gibt, beispielsweise '' | ||
+ | |||
+ | ---- | ||
+ | [[{}..: | ||
+ | ---- | ||
+ | |||
+ | |||
+ |