leos vorlage zu der alten plf
🧩 ProbePLF — PHP OOP (Sessions, Vererbung, Namespaces)
🎯 Ziel Aufbau einer kleinen PHP-Webapp mit Formular und Session-Speicherung, die OOP-Grundlagen (Klasse, Kapselung, Getter/Setter), Vererbung und Namespaces einsetzt.
🧱 Issue 1 — Wesentlich_überwiegend
Aufgabe (Issue 1) Entwickle eine erste Version als Einzeldatei (index.php) mit Session, Formular und einer Klasse.
Session aktivieren: session_start() muss als allererster PHP-Befehl in index.php stehen. Formular (Methode POST) mit genau 4 Eingabefeldern in sinnvollem Kontext (z. B. Produkt, Reise, Tier):
4 unterschiedliche HTML-type (z. B. text, number, date, email o. Ă„.) Sinnvolle Vorgabewerte per value="..."
Klasse Item mit
4 privaten Membervariablen mit unterschiedlichen Datentypen, vollständigen Gettern/Settern, Konstruktor, der ausschließlich die Setter verwendet.
Nach POST: Neues Item-Objekt erzeugen und in ein assoziatives Array in der Session speichern:
Key: z. B. inkrementelle ID oder uniqid()
Mehrere Objekte mĂĽssen speicherbar sein.
Ausgabe: Das Session-Array als HTML-Tabelle anzeigen (1 Spalte pro Membervariable + Key). Buttons/Aktionen:
Speichern (Formular abschicken) Löschen eines Eintrags über einen eingegebenen Key Alle löschen (Session-Array leeren)
âś… Akzeptanzkriterien (Issue 1)
session_start() steht ganz oben und Daten bleiben zwischen Requests erhalten. 4 Formularfelder mit unterschiedlichen type und sinnvollen value-Defaults sind vorhanden.
Item kapselt Daten: private Variablen, vollständige Getter/Setter, Konstruktor nutzt Setter. Speicherung in $_SESSION als assoziatives Array; mehrere Einträge sind möglich. Tabelle zeigt alle gespeicherten Objekte inkl. Key korrekt an. Buttons: Speichern, Löschen nach Key, Alles löschen funktionieren sichtbar.
🧱 Issue 2 — Wesentlich_vollständig
Aufgabe (Issue 2) Erweitere auf Vererbung und erweitere das Datenmodell um zusätzliche Felder.
Item-Membervariablen auf protected ändern. Neue Klasse ItemPlus erstellt, die von Item erbt.
3 zusätzliche private Membervariablen (unterschiedliche Datentypen) inkl. Getter/Setter. Konstruktor ruft parent::__construct(...) auf und verwendet auch hier Setter.
Formular um diese 3 Felder erweitern (inkl. Default-value). Speicherung in der Session nur als Instanzen von ItemPlus (nicht mehr Item). Einfache Eingabevalidierung pro Feld beim Speichern:
Leerwertprüfung, Datentyp-Prüfung (so weit über HTML-type hinaus nötig), einfache Range-Prüfung wo sinnvoll. Alle Fehler einer Eingabe werden gesammelt und gemeinsam angezeigt (kein Abbruch nach dem ersten Fehler).
âś… Akzeptanzkriterien (Issue 2)
Item → protected für geerbte Member; ItemPlus erweitert um 3 private Variablen mit Getter/Setter. Konstruktor von ItemPlus nutzt parent::__construct und Setter-Kaskade. Formular besitzt 7 sinnvolle Felder mit Defaults; Tabelle zeigt alle 7 Werte pro Eintrag. Validierungen laufen durch und zeigen alle betroffenen Fehler verständlich an; bei Fehlern wird nicht gespeichert.
🧱 Issue 3 — PlusPlus Aufgabe (Fortgeschritten)
Aufgabe (Issue 3) Struktur und Lesbarkeit verbessern: Auslagerung der Klassen in Dateien und Verwendung von Namespaces.
Lege Verzeichnisstruktur an (Beispiel):
src/Model/Item.php src/Model/ItemPlus.php
Jede Klasse in eine eigene Datei; Dateiname = Klassenname. Beide Klassen im Namespace App\Model deklarieren. In index.php die Klassendateien via require_once einbinden und mit use App\Model\ItemPlus; arbeiten. Funktionalität gegenüber Issue 2 bleibt unverändert.
âś… Akzeptanzkriterien (Issue 3)
Klassen liegen in separaten Dateien unter src/Model und sind mit namespace App\Model; versehen.
index.php bindet strikt per require_once ein und verwendet use-Importe. Anwendung läuft weiter fehlerfrei; Verhalten entspricht Issue 2.
đź§± Optionale Extra-Challenge (nur wenn Zeit ĂĽbrig ist)
FĂĽge eine kleine statische Validator-Klasse (z. B. App\Util\Validator) hinzu und rufe deren Methoden in der Formularlogik auf. Oder: Richte Composer-PSR-4-Autoloading fĂĽr App\ ein (anstelle von require_once).
đź§Ş Hinweise (nicht verpflichtend, nur Starthilfe)
Session kurz:
<?php session_start(); $_SESSION['items'] = $_SESSION['items'] ?? []; ?>Key erzeugen: $_POST['id'] ?? uniqid() oder eigener Zähler in der Session.
Tabelle: Keys sichtbar machen, damit gezieltes Löschen möglich ist.