PHP Standardvalidierungschema

ne0hype

Erfahrenes Mitglied
Hallo zusammen,

Meine Aufgabe ist es für die verschiedenen Bundesländer eine Abiturberechnung durchzuführen. Es gibt also immer Kurse die belegt werden müssen - mit "Fächern". Meine Frage ist nun die. Ich habe eine Klasse geschrieben die also die Infos über den Kurs und das belegte Fach hat.
Wenn ich jetzt prüfe ob bei dem Kurs alle Noten angegeben wurden oder das ausgewählte Fach auch z.b. als Prüfungsfach verwendet werden darf, dann brauche ich eine Validierungsklasse. Es kann nun passieren dass Fehler auftreten - keine Note angegeben oder ähnliches.
Meine Frage nun: Wie (ablauftechnisch) erstelle definiere ich jetzt die Abhängigkeiten?
Im ersten Schritt sollen nur Kurs bezogen validiert werden, dass heißt: Noten angeben? Noten > 1 <15 ? Kurs mit einem Fach belegt.

Im zweiten Schritt soll dann die gesamtheitliche Überprüfung stattfinden. D.h. passen die Fächerkombinationen usw.


Ich suche nun ein Validierungsablaufsschema.

Mein Ansatz wäre nun so:

PHP:
$courseStack = new CourseStack();


        $course = new Course();
        
        // legt ein vordefiniertes Fach an
        $course->setSubjectTemplate(array(
            'type' => '1. Prüfungsfach',
            'subject_id' => 1, // Deutsch
            'subject' => 'database',
            'exam' => true,
            'preselect' => true,
            'deletable' => false,
            'terms' => array(
                1 => true,
                2 => true,
                3 => true,
                4 => true,
                5 => true
            )
        ));

        // prüft den Kurs auf kursbezogene Fehler
        $course = CourseValidator::check($course);

        // fügt ein Kurs in den Stack
        $courseStack->insert($course);

Aber da stellt sich mir nun die Frage: Soll ich die Error-Klasse nun in der Course-Klasse instanziieren? Und dann über $course->getError() darauf zu greifen? Ist die Error-Klasse eine Eigenschaft des Kurses? Oder sollte ich Validationklasse und Error Klasse zusammenfassen und den $course dieser Klasse übergeben und dann diese im Stack speichern?


Gibt es ein Standardschema?

Hoffe auf rege Antworten...

Danke
 
Zuletzt bearbeitet:
Die Error-Klasse in der Kurs-Klasse zu instanziieren hört sich sehr krumm an. Die Error-Klasse, ist definitiv keine eigenschaft des Kurses. Deine Validator-Klasse sollte je nach Design Objekte des Typs Error-Klasse zurückgeben, häufig werden dafür die php-internen Error-Klassen (Exceptions) (miss-)braucht. Diese werden dann meistens mit verschiedenen catch-Blöcken gefangen um so gezielt auf die unterschiedlichen fehler zu reagieren. (Beispiel NoteOutOfRangeException oder so ähnlich)

Die andere Möglichkeit ist tatsächlich, dass der Validator ein array mit Errors bereithält. Diese sind dann zum Beispiel über die getErrors() -Mthode zu erreichen ;)
 
Hallo alxy,

danke für die Antwort.

Du sagt, dass es nicht gut ist die Error-Klasse in der Kurs-Klasse zu instanziieren. Ich habe aber folgendes gemacht und wüsste sonst nicht wie ich es anders lösen könnte.

Ich habe - wie schon oben beschrieben - ein Stack in dem alle Kurs-Klassen sind. Diesen Stack übergebe ich nun an Smarty und im Template ist nun solch eine Ausgabe (gekürzt).

Code:
{foreach $courses as $course}
                <tr class="course {if $course->isExam() === true}exam{/if} {if $course->isPreselected() === true}preselect{/if}">
                    <td class="subject">
                        <div class="subjectInfo" {if $course->courseError->hasError()}style="display:none"{/if}>
.....

Du siehst das ich über eine Foreach auf Eigenschaften des Kurses Bezug nehme. Wie soll ich nun "hasError()" aufrufen wenn die Error-Klasse keine Eigenschaft des Kurses ist?
PS: $course->courseError ist die Error-Klasse
 
Ja, ich weiß, ist meistens die Schere zwischen Theorie und Praxis. Also ich würde jetzt (praktischerweise) auch so vorgehen, in der Theorie kommt mir das oben beschriebene einfach schöner vor :d
 
Zurück