Einzelnen Beitrag anzeigen

Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#40

AW: [PHP] Klassenstruktur für Adressdatenbank

  Alt 6. Mär 2012, 16:32
Dafür macht man sich eine "Form" Klasse und erbt dann eine "Form_NewAddress" Klasse davon. Man könnte das dann so anwenden:

PHP-Quellcode:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $form = new Form_NewAddress($_POST); // Formular mit Daten
    if ($form->is_valid()) { // geht interne Felder durch: is_email(...) && is_plz(...) && ...
        $new = new DB_Adressen();
        $new->set_data($form->cleaned_data); // cleaned_data: Array mit bereinigten Werten (zB "echte" Ints)
        $new->save();
    } else {
        echo $form->render(); // gibt Fehlermeldung + vorher ausgefüllte Felder aus
    }
} else {
    $form = new Form_NewAddress(); // leeres Formular
    echo $form->render();
}
Ohne mir jetzt genauer Gedanken über die Implementation gemacht zu haben, würde ich die NewAddress-Form-Klasse ungefähr so machen:

PHP-Quellcode:
class Form_NewAddress extends Form
{

    // wird von der Vaterklasse im __construct aufgerufen
    protected function init_fields()
    {
        $this->add_field("name", new FormField_VarChar(255));
        $this->add_field("email", new FormField_Email());
        $this->add_field("irgendwas_mit_regex", new FormField_Regex(".*hier kranken Regex einfügen.*"));
    }

    // Weitere Methoden werden alle geerbt. is_valid() geht die Felder durch und füllt
    // cleaned_data. render() ruft alle render() Methoden der FormField-Instanzen auf
    // die wiederum den HTML Code zurückgeben. __construct prüft speichert eventuell
    // mitgegebene Daten in raw_data. Vaterklasse sollte übrigens abstract sein.

}
Ich hoffe du verstehst was ich meine. Ansonsten sag Bescheid, dann mach ich gern ein detaillierteres Codebeispiel.

DB_Adressen::save() macht übrigens allgemein wenig Sinn. Eine Instanz repräsentiert einen Datensatz der Tabelle. Die Klasse selbst repräsentiert die ganze Tabelle. Speichern kann man eigentlich nur einen Datensatz.

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat