Prüfung von enum-Werten in Templates

  • Wie geht ihr eigentlich mit einem DatabaseObject um, das bspw. ein Feld status hat, welches ein Wert von 1-5 in der DB haben kann. Wie fragt ihr dieses (speziell im Template) ab?


    Bsp. in PHP, wo es sauber funktioniert:


    PHP
    const STATUS_CANCELED = 1;
    const STATUS_FINISHED = 2;
    const STATUS_OPEN = 3;
    const STATUS_NEW = 4;
    const STATUS_UNKNOWN = 5;
    
    if ($foo->status === self::STATUS_OPEN) {
    ...
    }

    Im Template hingegen, müsste ich eine "Magic number" nutzen, was ja eher unsauber ist.

    Smarty
    {if $foo->status === 3}
    ...
    {/if}

    Meine aktuelle Lösung ist es pro Status eine Methode zu implementieren

    Foo::isStatusOpen, Foo::isStatusNew... wobei das bei vielen Stati den Code etwas aufbläht.


    Auf die Konstanten kann man im Template ja nicht zugreifen, oder habe ich da was verpasst?

    • Official Post

    Meine aktuelle Lösung ist es pro Status eine Methode zu implementieren

    Ja, das ist auch die einzig saubere Lösung, um so Business-Logik aus den Templates herauszuhalten. Wir haben in der Vergangenheit selbst den Fehler gemacht, zu viel Logik dort zu platzieren und insbesondere mit magischen Zahlen zu arbeiten.


    Es ist richtig, dass eine Handvoll dedizierter Methoden zwar etwas "Platz wegnehmen", man kann diese aber auch bequem am Ende der Klasse platzieren und schon stören sie nicht. Wir setzen inzwischen ausnahmslos bei neuem Code auf entsprechende Methoden und es macht sich bezahlt. Die Logik ist viel leichter anpassbar und Templates werden deutlich besser lesbarer.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!