erste Schritte in einem PHP-Projekt (Composer und PHPUnit) Teil 1

ich möchte in einer klein Blog-Reihe zeigen welche Schritte ich bei einem neuen Projekt gehe. Zusätzlich möchte ich Grundlagenwissen über spezielle  Themen (in diesem Beitrag Composer und PHPUnit) vermitteln.

Projektstart

Vor dem Start des Projektes sollte man natürlich Wissen was das Ziel des Projektes ist. Wenn man das Ziel kennt kann man sich überlegen wie und womit man das Ziel erreichen möchte.
Innerhalb dieses Blog-Reihe will ich eine kleine Webanwendung erstellen (Mit einer Anmeldung und einem einfachen Artikelsystems). Sie soll im Test Driven Design entwickelt werden und ein ORM benutzen. Folgende Software/Framworks will ich einsetzen:

  • Composer (Projektverwaltung)
  • PHPUnit (für die Unittests)
  • Smarty (Template Engine)
  • RedbeanPHP4 (ein einfaches ORM für PHP)
  • Git für die Versionsverwaltung (Ich werde das Projekt auf GitHub veröffentlichen)
  • Subversion für das Herunterladen von Smarty

 Schritte bzw. Inhalt dieses Teils

  1. Erstellen der Projektstruktur
  2. Einrichten von Composer
  3. Installation von PHPUnit, Smarty, RedbeanPHP4
  4. Erstellen eines einfachen Tests
  5. HTML Seiten mit Smarty anzeigen lassen (in Teil 2)
  6. Datenbank mit RedbeanPHP4 anbinden (In Teil 3)

1. Projektstruktur erstellen

Bei einem neuen Projekt lege ich immer die gleichen Dateien und Ordner an:

  • view/
  • model/
  • controller/
  • test/
  • index.php
  • .gitignore
  • composer.json

Da ich großer Fan der MVC-Architektur bin, lasse ich das immer auch in die Ordnerstruktur einfließen. Der Test-Ordner wird später für die Unittest benötigt. Mit der gitignore Datei verhindere ich das die IDE-Einstellungen und die später installierte Frameworks nicht in die Versionsverwaltung aufgenommen werden. Die Composer.json wird im nächsten Schritt benötigt.

2. Composer einrichten

Composer ist ein Paketverwaltung und Abhänigkeitsmanagement (dependency management) für PHP-Projekte. Damit muss man sich nicht mehr auf darum kümmern ob später das Framework in der richtigen Version installiert ist.

Die Installation von Composer ist von System zu System leicht unterschiedlich. Dies wird aber auf der Webseite gut erklärt.

In der composer.json Datei werden alle wichtige Informationen (im JSON-Format) für den Composer eingetragen. In diesem Fall sieht die Datei so aus:

Die Angaben „name“, „description“ und „license“ wird zwar nicht benötigt aber so wird die Datei ohne Warnung validiert.

Im Block „require“ werden die benötigte Pakete angegeben und die Version die man benötigt. Zum Beispiel PHPUnit in der Version 4.1.*. Das * gibt an das immer die neuste Version installiert wird (aber nicht die Version 4.2 oder 5).

3. Installation von PHPUnit, Smarty, RedbeanPHP4

Der Download und die Installation der Paket kann mit „composer install“ gestartet werden (muss im Projektverzeichnis in einer Konsole eingegeben). Nach wenigen Minuten sollten die Paket (zusammen mit deren Abhängigkeiten) in dem neuen Verzeichnis „vendor/“ vorhanden sein. In diesem Ordner gibt es auch eine autoload.php, welche später per „require_once“ eingebunden werden.

Die Installation und Einrichtung von Smarty, PHPUnit und Redbean sind damit abgeschlossen und wir können nun zur Entwicklung des Projekts übergehen.

Erstellen eines einfachen Tests

Damit etwas zu Testen da ist lege ich im Ordner „model“ die PHP-Klasse user (siehe github) an. Diese Klasse soll ein Benutzername und ein Password als Eigenschaft haben. In dem ersten Test soll nun überprüft werden ob ein Objekt des Typs user erstellt werden kann und ob ein Benutzername und Password hinterlegt werden kann. Das Grundgerüst der Testklasse sollte so aussehen:

In der „setUp“-Funktion wird ein Objekt der Klasse „User“ erstellt. Dadurch können die anderen Funktionen auf das Objekt zugreifen und es wird getestet ob die Erstellung des Objekts überhaupt möglich ist.

Ob das Testen des Benutzernamen geht kann so aussehen:

Die Funktion assertEquals vergleicht den String den man eingegeben hat (hier „tester“) mit dem  Wert welche die Funktion getNamen() liefert. Der Test sollte von Anfang an erfolgreich sein. Nicht erfolgreich sollte der Passworttest sein.

Das Passwort sollte als SHA1-Hashwert gespeichert werden. Im Moment wird beim setzen des Passworts dieses nicht „verschlüsselt“. Damit der Test erfolgreich ist, sollte der Setter in der Klasse „user“ geändert werden.

Nach der Änderung sollte der Test erfolgreich sein. Ob es nicht besser wäre vorher ein Hash des Passworts zu erstellen sollte hier nicht das Thema sein.

Im 2. Teil möchte ich Zeigen wie man smarty in das Projekt einbindet und im 3. Teil das ORM RedbeanPHP4. Falls es Fragen und Anregungen gibt, freue ich mich in den Kommentaren.

Johannes

Hauptberuflich bin ich im Bereich Filesecurity unterwegs und schütze die Daten meines Arbeitgebers vor internen und externen Gefahren. Nebenberuflich helfe ich KMUs als IT-Consultent bei der IT-Strategie sowie bei der Entwicklung von Webanwendungen.

Schreibe einen Kommentar

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