Seite 1 von 1

Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: So 13. Nov 2022, 19:00
von ArminSchulz
Wie in meinem Vortrag auf der Konferenz dargelegt, liefert ein
<we:field type="text" name="we_id" to="global" nameto="dieID"/>
immer einen String
gleiches gilt in PHP: $GLOBALS[‘dieID‘] = $dieID = we_tag(‘field‘,[‘type‘=>‘text‘, ‘name‘=>‘we_id‘]);
wenn ich dann folgendes mache zur initialisierung
$myDoc->initByID($GLOBALS[‘dieID‘])-> Error, erwartet einen Integer
man muss immer intval() nutzen oder nach int casten damit es funktioniert.
Es gibt ja mittlerweile auch <we:field type="int" name="we_id" to="global" nameto="dieID"/>
Aber auch das liefert eine Globals vom Typ "string"

Es wäre besser, man könnte den Ausgabe-Typ direkt beinflussen
Ich würde daher ein generelles (analog zu to und nameto) neues Attribut vorschlagen "typeto" mit string, array, bool, int,....

Analog bei we:setvar:
hier gibt es das Attribut varType, aber das beeinflusst nur die Filterung (aus REQUST,POST,GET) nicht den Ausgabe-Typ.
Das wird ja auch zum füllen / modifizieren von Properties von Dokumenten (usw.) vorgeschlagen.
Da es dort das Attribut "typefrom" schon gibt (mit anderem Zweck), wäre hier ein Attribut "fromtype" hilfreich
Hier wäre der default-Wert "string" da man in WE-Tags (ohne PHP) nichts anderes als Strings übergeben kann,
Aber in PHP kann man dann auch gleich z.B. ein Array übergeben, oder einen bool, oder (später mal ein DatetTime-Object)

Ich stelle das mal hier zur Diskussion und hoffe auf positives Feedback oder Vorschläge
wie man das eleganter lösen kann.

Re: Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: So 13. Nov 2022, 21:09
von ThomasGoebe
Kann we nicht selbst dafür sorgen, dass die richtigen Typen bei setvar etc. rauskommen? Die Typen sind doch in der Regel bekannt.
Und bei dem Beispiel mit der we_id sollte es eher einen neuen Typ geben: we:field type="id" und nicht type="text" btw. könnte das type="" im Grunde komplett dort entfallen, da die Typen sich aus der jeweiligen Felddefinition ergeben.

Re: Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: Mo 14. Nov 2022, 09:06
von blickfang
ideal wäre natürlich, wenn setVar die Typen gleich "richtig" setzt, sofern bekannt. Um den Tyo nach Wunsch beeinflussen zu können wäre evtl. auch ein Attribut toType="bool" usw. denkbar?

Re: Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: Mo 21. Nov 2022, 18:39
von lukasimhof
Ich würde auch meinen: WE soll wo immer möglich selbst die passenden Typen setzen (auf jeden Fall bei typbekannten Feldern und Properties), und zusätzlich macht auch ein "typeto" Sinn...
... letzteres zum einen, um ohne PHP Werte in einen anderen Typ zu casten, zum anderen aber auch weil z.B. bei from="request" ja per se alles als String kommt (hier würde mit dem typeto dann auch die freie Wahl des Requestfilters gesteuert).

Re: Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: Do 24. Nov 2022, 01:34
von mokraemer
Der Rückgabewert von allen Tags ist per se erst mal String - weil sie für die Ausgabe auf einer Webseite konzipiert sind.
Erst PHP 8.2 erlaubt dann zusammengesetzte Typen als Rückgabe - was deren Einsatz für Warnung bringen würde, müßte man abwarten - ansonsten könnten wir nur die Rückgabe des Tags zum Typ (mittels Attribut) casten.

Re: Fallstricke mit der Typsicherheit: neues globales Attribut typeto

Verfasst: Mo 9. Jan 2023, 10:00
von haydi
Ich finde den Vorschlag von Armin sehr gut! Hatte ich nie dran gedacht, weil ich stets automatisch ein intval() mache auch Sicherheitsgründen.

Die Attribute "typeto" und "fromtype" sind auch vom Namen her so gewählt, dass sie bie Bedarf universeller eingesetzt werden können.

Zudem würde ich auch erwarten, dass wenn ich ein <we:field type="int" name="we_id" to="global" nameto="dieID"/>hätte, dass dann auch ein int zurückkommt.
Neue Typen wie Thomas vorschlägt fände ich nicht gut... macht die Sache zu kompliziert, finde ich.