Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:dbklasse:start [10.06.2021 14:08] – [Plugin-Konfiguration] sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:dbklasse:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Verbindung zur Datenbank: Eine Datenbankklasse ====== | ||
- | |||
- | ===== Objektorientiertes PHP ===== | ||
- | |||
- | Anders als Java erzwingt PHP nicht, dass der Anwender objekorientiert programmiert, | ||
- | |||
- | <code php> | ||
- | class syntax_plugin_projekt extends DokuWiki_Syntax_Plugin | ||
- | { | ||
- | [...] | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Datenbank-Klasse ===== | ||
- | |||
- | Wir lagern nun den Zugriff auf die mysql-Datenbank in eine eigene Klasse aus. | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Erstelle eine Datei '' | ||
- | |||
- | <code php mysqldb.php> | ||
- | <?php | ||
- | |||
- | class mysqldb { | ||
- | |||
- | /** | ||
- | * Constructor: | ||
- | * | ||
- | * @param string | ||
- | * @param string | ||
- | * @param string | ||
- | * @param string | ||
- | * | ||
- | * @return object | ||
- | */ | ||
- | function mysqldb($dbusername, | ||
- | |||
- | try { | ||
- | $pdo = new PDO(" | ||
- | $pdo-> | ||
- | |||
- | } catch ( PDOException $e ) { | ||
- | echo ' | ||
- | return FALSE; | ||
- | } | ||
- | |||
- | $this-> | ||
- | |||
- | } | ||
- | } | ||
- | |||
- | ?> | ||
- | |||
- | </ | ||
- | |||
- | Wenn man ein neues '' | ||
- | |||
- | Damit wir mysqldb-Objekte (und später vielleicht weitere Objekte) nutzen können müssen uns klar machen, wer in unserem Plugin die Rolle der " | ||
- | |||
- | {{ : | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | Binde im Kopf der Datei '' | ||
- | |||
- | <code php> | ||
- | [...] | ||
- | // must be run within Dokuwiki | ||
- | if (!defined(' | ||
- | die(); | ||
- | } | ||
- | |||
- | // Klassendateien einbinden | ||
- | require(" | ||
- | |||
- | class syntax_plugin_projekt extends DokuWiki_Syntax_Plugin | ||
- | { | ||
- | [...] | ||
- | </ | ||
- | |||
- | * Ergänze innerhalb der '' | ||
- | * Mache dir klar, welche Funktion das dabei erzeugte Objekt '' | ||
- | * Teste, was passiert, wenn du eine falsches Benutzer/ | ||
- | |||
- | < | ||
- | $mydb = new mysqldb(" | ||
- | </ | ||
- | |||
- | ==== Plugin-Konfiguration ==== | ||
- | |||
- | Sehr unschön ist jetzt natürlich, dass die datenbank Credentials im Quelltext des Plugins stehen - auf diese Weise kann man ein solches Plugin schlecht veröffentlichen oder weitergeben. Wesentlich sind hier 2 Implikationen: | ||
- | |||
- | - Das kollidiert massiv mit der Versionsverwaltung: | ||
- | - Wenn ein anderer Benutzer in ferner Zukunft das Plugin in seinem eigenen Wiki verwenden möchte, muss dieser, um das Plugin für sich nutzbar zu machen den Quelltext editieren um dort seine eigenen Datenbank Zugangsdaten einzutragen - das ist aus vielen Gründen Mist, einer ist z.B.: wie das Plugin jetzt auf neue Versionen aktualisiert werden soll, denn dabei würden diese Änderungen ja jedes mal wieder rückgängig gemacht. | ||
- | |||
- | DokuWiki bietet für dieses Problemfeld die Möglichkeit, | ||
- | |||
- | === Konfigurations-Konventionen === | ||
- | |||
- | Im Plugin-Ordner gibt es ein Unterverzeichnis '' | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | Wenn wir jetzt also unser Plugin durch DokuWiki " | ||
- | |||
- | - Welche Optionen brauchen wir und was müssen wir diesbezüglich in die Datei '' | ||
- | - Was sollen die Vorgabewerte für diese Optionen sein und was muss in '' | ||
- | - Wie können wir im Quelltext des Plugins auf die Werte unserer Konfigurationsoptionen zugreifen? | ||
- | |||
- | Die **Optionen** liegen auf der Hand: DB-Username, | ||
- | |||
- | In den Dateien '' | ||
- | |||
- | <code php metadata.php> | ||
- | $meta[' | ||
- | </ | ||
- | |||
- | <code php default.php> | ||
- | $conf[' | ||
- | </ | ||
- | |||
- | Die vollständige Entwicklerdokumentation findet sich [[https:// | ||
- | |||
- | Zugriff auf die Werte der Plugin-Optionen erfolgt mit | ||
- | |||
- | <code php> | ||
- | $dbuser = $this-> | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A3) === | ||
- | |||
- | Füge die Informationen aus dem vorigen Abschnitt deinem Plugin hinzu und mache auf diese Weise den Datenbankbenutzer konfigurierbar. | ||
- | |||
- | Teste die Änderungen, | ||
- | |||
- | {{ : | ||
- | Dort sollte es jetzt einen Abschnitt für das Plugin '' | ||
- | |||
- | {{ : | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | Trage deinen DB-Benutzernamen dort ein und speichere die Einstellungen. | ||
- | |||
- | Modifiziere dann deine '' | ||
- | |||
- | Teste, ob die Datenbankverbindung immer noch ordnungsgemäß zustande kommt. | ||
- | |||
- | Ergänze die weiteren Optionen für Passwort, Datenbankname und Datenbankhost, | ||
- | |||
- | ++++ Hilfestellung | | ||
- | In der '' | ||
- | <code php> | ||
- | // get settings | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | // | ||
- | | ||
- | </ | ||
- | ++++ | ||
- | |||
- | ==== Modellierung - fällt aus ==== | ||
- | |||
- | Eigentlich sollte man sich an dieser Stelle überlegen, wie man seine Problemstellung (objektorientiert) modellieren möchte, das fällt uns etwas schwer, weil wir noch keine Problemstellung haben. Ein paar Überlegungen kann man an dieser Stelle dennoch anstellen. | ||
- | |||
- | Eine grundlegende Frage könnte z.B. sein, wie man die '' | ||
- | |||
- | Wir entwickeln zunächst weitere Methoden innerhalb unserer mysqldb-Klasse - wenn sich unsere Problemstellung konkretisisert können wir im Zuge eines Code-Refactoring weitere Aufteilungen und Modellierungsschritte vornehmen. | ||