Přetypovávání výstupu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
crempa
Člen | 198
+
0
-

Zdravím,

vím, že se tu o tom už mluvilo, ale realizováno to asi ještě není… Mluvím o přetypování výstupu hodnot z formuláře např. podle pravidel Form::INTEGER apod.

Pokud mě teď sedí názvy form. polí s názvy sloupců v tabulce tak lze spojení tabulka->formulář řešit velice jednoduše, jediným problémem je, že vše leze z Forms jako string, což např. u MySQL asi není zas takovej problém (ale i to je na diskusi.. vadí že nechávám přetypování až na databázi?).
Lze to teď řešit nějak elegantněji než položky výstupního pole přetypovávat ručně?

Díky, P.

Jod
Člen | 701
+
0
-

Wiki hovorí o PHP:

Typová kontrola: slabá, dynamická

PHP pretypováva samo, pri porovnávani by sa tomu malo dať vyhnúť pomocou ===. A myslím, že ručné pretypovanie funguje cez (int)$cislo, (string)$retazec. Takže si to môžeš keď tak prehnať cez nejakú funkciu. Ale rozšíriť objekt o túto funkcionalitu, dokým nebude v nette.

mlady
Člen | 24
+
0
-

Jod napsal(a):

Wiki hovorí o PHP:

Typová kontrola: slabá, dynamická

PHP pretypováva samo, pri porovnávani by sa tomu malo dať vyhnúť pomocou ===. A myslím, že ručné pretypovanie funguje cez (int)$cislo, (string)$retazec. Takže si to môžeš keď tak prehnať cez nejakú funkciu. Ale rozšíriť objekt o túto funkcionalitu, dokým nebude v nette.

Myslim, ze priamo v Nette by to predsalen bolo lepsie. Jednoduche (rucne alebo automaticke) pretypovanie nemusi v nasich podmienkach vzdy pracovat tak ako chceme:

$t = "0,123456";
var_dump($t);                            // string(8) "0,123456"
var_dump((float) $t);                    // float(0)
var_dump(StrTr($t, ",", "."));           // string(8) "0.123456"
var_dump((float) StrTr($t, ",", "."));   // float(0.123456)

Editoval mlady (13. 2. 2009 14:30)

crempa
Člen | 198
+
0
-

Tak ručně to půjde o tom žádná, jen mě to přijde jako práce navíc, když už na jednom místě říkám, že prvek musí být celé číslo (přes Form::INTEGER…)

Snad bych si to i do formulářů dopsal ale vrtání v cizím kódu mě dělá celkem problém takže kdyby někdo věděl kam něco na způsob

<?php
...
	$value	= (($rule == Forms::INTEGER) ? (int)$value : $value);
...
?>

doplnit nebo mě nasměroval budu rád :-)

Díky

Jan Tvrdík
Nette guru | 2595
+
0
-

crempa napsal(a):

Tak ručně to půjde o tom žádná, jen mě to přijde jako práce navíc, když už na jednom místě říkám, že prvek musí být celé číslo (přes Form::INTEGER…)

Řešilo se to v topicu 967-upravit-chovani-validace-formularu, ale nevím, jak to nakonec dopadlo.

paranoiq
Člen | 392
+
0
-

@mlady: to s těmi čísly není dobrý příklad. automatika by zrovna u floatu byla na místě, pokud by se to dalo vyřešit obecně. ale takové řešení bohužel neexistuje:

<?php
// ok
$t = "123,45";
$t = "123.45";
// ok
$t = "123,456.789";
$t = "123.456,789";
$t = "123 456,789";
// stále ok
$t = "123456.789";
$t = "123456,789";
// i tohle je ok
$t = "123 456";
// a teď babo raď! jsou to destiny či tisíce?
$t = "123.456";
$t = "123,456";
?>

takže tohle by si měl rozhodnout sám autor aplikace pomocí jazykových nastavení

Editoval paranoiq (13. 2. 2009 17:24)

kravčo
Člen | 721
+
0
-

paranoiq napsal(a):

@mlady: to s těmi čísly není dobrý příklad. automatika by zrovna u floatu byla na místě, pokud by se to dalo vyřešit obecně. ale takové řešení bohužel neexistuje:

<?php
// ok
$t = "123,45";
$t = "123.45";
// ok
$t = "123,456.789";
$t = "123.456,789";
$t = "123 456,789";
// stále ok
$t = "123456.789";
$t = "123456,789";
// i tohle je ok
$t = "123 456";
// a teď babo raď! jsou to destiny či tisíce?
$t = "123.456";
$t = "123,456";
?>

S tými ok úplne nesúhlasím. Z môjho pohľadu je v slovenskom kontexte číslo 123,456.789 chybné, pričom v anglickom správne. Ako píšeš, všeobecné riešenie neexistuje, no konkrétne – pre slovenské čísla – áno.

Rovnaký problém, nie v zápise ale vo význame, môže byť pri dátume (dd-mm-yy vs. mm-dd-yy).

takže tohle by si měl rozhodnout sám autor aplikace pomocí jazykových nastavení

Nette by toto riešiť mohlo, no na základe locale, či vlastných nastavení, ktoré by si autor vedel prispôsobiť…

paranoiq
Člen | 392
+
0
-

omlouvám se za zmatení. těmi „ok“ jsem nemyslel, že je to v nějakém kontextu správně či špatně, nýbrž zda je to rozhodnutelné bez znalosti kontextu – tedy bez locale

v ‚roadmap‘ (1324-vydavani-verzi#p7290) David locale zmínil, tak uvidíme…