Tag 11 – Configuration Class 2


Jedes System sollte eine einfache Möglichkeit besitzen konfiguriert zu werden. In den meisten Fällen gibt es eine Konfigurationsdatei – so auch bei mir. Allerdings habe ich mir überlegt, die Konfiguration nicht in eine PHP-Datei einzubetten, sondern in eine INI-Datei. So ist es schnell möglich diese einfache Textdatei anzupassen.

Allerdings hat die Vorgehensweise auch Nachteile. Da diese besondere Datei nicht vor fremden Augen geschützt ist, kann sie jeder leicht einsehen, der die URL kennt. Um das Ausliefern der Datei von Apache zu verhindern, habe ich die „.htaccess“-Datei angepasst.

  1. <Files ~ „.(ini)$“>
  2. Order allow,deny
  3. Deny from all
  4. </Files>

Kommen wir jetzt zur Konfigurationsdatei. Sie ist in 3 wichtige Bereiche eingeteilt. Der erste Bereich enthält Angaben die für die Webapplikation wichtig sind. Hier ist es z.B. die beiden Datumsformate um eine Kurz- und Langschreibweise des Datums festzulegen.

  1. [Application]
  2. dateformatlong = „%d. %B %Y“
  3. dateformatshort = „%d. %m. %Y“

Im zweiten Bereich werden alle wichtigen Zugangsdaten für die Datenbank hinterlegt. In meinen Fall ist das die Serveradresse (host), der Benutzername (user), das dazugehörige Kennwort (password) und der Datanbank-Name (db)

  1. [Database]
  2. host = „localhost“
  3. user = „demouser“
  4. password = „password“
  5. db = „redcms_advent“

Im letzten Bereich werden Informationen abgespeichert, die für das Anzeigen der Website wichtig sind. Da ich zur Zeit nur den Website-Titel und die Tagline brauche, habe ich auch das dort hingeschrieben.

  1. [Website]
  2. Title = „RE-Design“
  3. Tagline = „REDcms Advents“

Was muss nun die „Configuration“-Klasse nun alles machen? Im Grunde genommen nur diese „INI“-Datei in einen zweidimensionalen Array laden und Methoden anbieten auf die Werte der Konfiguration zuzugreifen.

Das Laden der Konfigurationsdatei geschieht im Konstruktor. Mit der Methode „getValue()“ und ihrem 2 Parametern für die Sektion und dem Schüssel bekommt man den entsprechenden Wert zurück. Falls man statt einen einzelnen Wert die gesamte Sektion als Array bekommen möchte, so kann man mit der „getSection()“-Methode dies tun.

  1. class Configuration
  2. {
  3. public $version = 1.0;
  4. private $file;
  5. private $config;
  6. public function __construct($file) {
  7. $this->file = $file;
  8. try {
  9. $this->config = parse_ini_file($file, true);
  10. } catch (Exception $e)
  11. < {
  12. die(‚Config-Error parseIni: ‚.$e.‚: ‚.$file);
  13. }
  14. }
  15. public function __destruct() {}
  16. public function getValue($key, $section) {
  17. return $this->config[$section][$key];
  18. }
  19. public function getSection($section) {
  20. return $this->config[$section];
  21. }
  22. }

Um die „Configuration“-Klasse nicht versehentlich mehrmals zu laden, könnte man sie innerhalb eines Updates als Singelton-Pattern anlegen und benutzen. Auch wäre später das Ändern von Konfigurationseinstellungen möglich, womit man dann schnell im Administrationsbereich das System anpassen könnte.

Downloads


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

2 Gedanken zu “Tag 11 – Configuration Class