Pravidlo Form::FILLED sa neaplikuje na file input v Nette 1.0?

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

Pri nastaveni pravidla Form::FILLED sa neprida atribut data-nette-rules k inputu a validacia na serveri tiez nefunguje..

<?php
$form = new AppForm($this, $name);
$form->addFile('file', 'File')
	->addRule(Form::FILLED, 'File cannot be empty');
?>

Je to bug alebo robim nieco zle? Dik..

David Grudl
Nette Core | 8228
+
0
-

Je to v pořádku, soubor se ověřuje pouze na serveru.

Matúš Matula
Člen | 257
+
0
-

Validacia u klienta bola nespolahliva alebo preco sa od nej upustilo? Dik..

Panda
Člen | 569
+
0
-

Validace u klienta není pro souborové prvky možná, protože JavaScript nemá z bezpečnostních důvodů přístup k datům elementu input[type=file].

Aurielle
Člen | 1281
+
0
-

Vím, že file inputy jsou pro JS omezené, nicméně nic nebrání přečíst název souboru a cestu: (skript je převzatý z MediaWiki, upravený pro použití v mé aplikaci, v Firefoxu 3.6.8 funguje bezproblémově)

 <script type="text/javascript">
        	/* <![CDATA[ */
            function fillDestFilename(fileinput, id)
			{
                if (!document.getElementById)
				{
                    return;
                }
                var path = fileinput.value;
                // Find trailing part
                var slash = path.lastIndexOf('/');
                var backslash = path.lastIndexOf('\\');
                var fname;
                if (slash == -1 && backslash == -1) {
                    fname = path;
                }
                else
                    if (slash > backslash) {
                        fname = path.substring(slash + 1, 10000);
                    }
                    else {
                        fname = path.substring(backslash + 1, 10000);
                    }

                // Capitalise first letter and replace spaces by underscores
                fname = fname.charAt(0).toUpperCase().concat(fname.substring(1, 10000)).replace(/ /g, '-');

                // Output result
                var destFile = document.getElementById(id);
                if (destFile) {
                    destFile.value = fname;
                }
            }
			/* ]]> */
</script>
redhead
Člen | 1313
+
0
-

Také bych byl aspoň pro tu FILLED operaci (resp. pro všechno kromě validace MIME_TYPE).

Jinak co se týče cesty získané přes JS, někdo mi říkal, že některý browser zobrazí pouze jméno souboru a ostatní i cestu k němu (chtěl totiž udělat preview obrázku z lokalního filesystému, což mu bez cesty nešlo..)

Editoval redhead (31. 8. 2010 16:50)

Matúš Matula
Člen | 257
+
0
-

redhead napsal(a):

… Jinak co se týče cesty získané přes JS, někdo mi říkal, že některý browser zobrazí pouze jméno souboru a ostatní i cestu k němu (chtěl totiž udělat preview obrázku z lokalního filesystému, což mu bez cesty nešlo..)

Je to tak, kedysi som to tiez skusal.. min. tu validaciu FILLED by som tiez privital.

David Grudl
Nette Core | 8228
+
0
-

Že lze zjistit value je pro mě novinka. V době, kdy vznikaly NForms, to žádný významný prohlížeč neumožňoval. Takhle samozřejmě FILLED validaci nic nebrání.

Jan Tvrdík
Nette guru | 2595
+
0
-

Mám dojem, že validace na FILLED fungovala v Nette vždycky a přestala až po posledním refactoringu týkajícího se HTML 5.

Proki
Člen | 66
+
0
-

Honza má pravdu, JavaScriptová validace inputu pro vkládání souborů dříve fungovala… zrovna jsem si to ověřil na projektu napsaném v Nette 0.9.5

David Grudl
Nette Core | 8228
+
0
-

fixed