Form – ignoruje mnou zadaný validační text

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

Dobrý den,

vela se omlouvám za velmi začátečnickou otázku – respektive mi hlava nebere proč mi nefunguje základní kód. Problém je v tom, že mi form nechce, pokud nezadám „name“ zobrazit hlášku „Huhu?“, ale zobrazuje nějaký defaultní text ať vyplním pole. Pokud jsem zkusil nahradit FILLED → INTEGER tak se mi nikdy nepovedlo vyvolat chybovou hlášku – ačkoliv jsem zadal do pole nečíselnou hodnotu – absolutní ignor mnou zadaných Rule.

namespace Nette;
use Tracy\Debugger;
header('Content-Type: text/html; charset=utf-8');
require 'Nette/loader.php';

Debugger::enable();

$form = new Form;
$form->addText('name', 'Jméno:')->addRule(Forms\Form::FILLED, "huhu?");
$form->addText('email','E-mail');
$form->addCheckbox('promo','vzkaz');
$form->addTextArea('text','Vzkaz');
$form->addSubmit('send','Odeslat');

echo $form;

Děkuji za trpělivost při odpovědi na můj pravděpodobně velice triviální dotaz.

Roman

jiri.pudil
Nette Blogger | 1032
+
+1
-

Za to zřejmě může HTML5 validace v prohlížeči. Dá se vypnout takto:

$form->elementPrototype->novalidate = TRUE;

Editoval jiri.pudil (21. 8. 2014 8:53)

s.e.m.a
Člen | 6
+
0
-

V případě, že užiji Váš kód tak dojde ke kompletnímu vypnutí validace …

David Matějka
Moderator | 6445
+
0
-

Vypne to pouze html5 validace. Serverove validace samozrejme zustanou. Pokud chces client-side validace dle definovanych pravidel, pouzij netteForms.js

s.e.m.a
Člen | 6
+
0
-

Tak úplně jinak – validace na serverové straně neproběhne vůbec. Když zakážu daným kódem client validaci tak se neděje vůbec nic … formulář se odešle ale nevrátí žádné informace o tom, že něco nebylo vyplněno nebo že nejde o číselnou hodnotu, email atd…

Robin Martinez
Člen | 89
+
0
-

kdyz tam pridam setRequired a pridam metodu isSuccess, tak to jede

<?php
require 'Nette/loader.php';

use Nette\Forms\Form;

$form = new Form;
$form->addText('name', 'Jméno:')->setRequired('Zadejte prosím jméno');
$form->addText('email','E-mail');
$form->addCheckbox('promo','vzkaz');
$form->addTextArea('text','Vzkaz');
$form->addSubmit('send','Odeslat');

if ($form->isSuccess()) {
    echo 'Formulář byl správně vyplněn a odeslán';

    $values = $form->getValues();
    dump($values);
}

echo $form;

a tohle mi jede taky

$form->addText('name', 'Jméno:')->addRule(Form::INTEGER, 'cislo?');

ale s tim Form:FILLED se validace sice provede, protoze podminka isSuccess neprobehne, jen se nejakym zpusobem neukaze ta hlaska o vyplneni…

Editoval 3ugeene (21. 8. 2014 12:46)

s.e.m.a
Člen | 6
+
0
-

Hmm, tak když si zkopíruji Váš kód a spustím. Tak mi vyskočí upozorňující hláška, ale ne ta, kterou jste si nadefinoval ale ve znění: „Vyplňte prosím toto pole“. Pokud zakáži validaci na klient side:

$form->elementPrototype->novalidate = TRUE;

tak nedojde k ničemu. Required je úplně ignorován… Ach jo to mi to s tím Nette začíná :)

Robin Martinez
Člen | 89
+
0
-

co jiny prohlizec a verze nette? Jen tak pro jistotu…

Mne to jede jak ve firefoxu, safari i chrome. Vic tu ted nemam. A kdyz pridam to zakazani validace, tak to jede taky…

Editoval 3ugeene (21. 8. 2014 12:42)

David Matějka
Moderator | 6445
+
0
-

a mas tam opravdu to isSuccess()? bez toho se totiz nevyvola validace…

David Kudera
Člen | 455
+
0
-

Třeba u ručního vykreslování bývá většinou důvodem, že lidi zapomenou ty chybový hlášky někde taky vypsat, ale pokud nefunguje ani echo $form..

Editoval David Kudera (21. 8. 2014 12:44)

s.e.m.a
Člen | 6
+
0
-

Mám zkopírovaný kód od „3ugeene“ – Chrome, Firefox, Šnek … nic .. teda vyskočí klientská hláška, ale pokud vypnu tak bez odezvy…

David Matějka
Moderator | 6445
+
0
-

Zkusil jsem to a jde to bez problemu – pri vypnute html5 validaci se vedle inputu zobrazi hlaska… Co mas za verzi nette? (jen pro poradek, ale nemyslim, ze to bude mit vliv)

Editoval matej21 (21. 8. 2014 12:59)

s.e.m.a
Člen | 6
+
0
-

Sám tomu nerozumím … restartoval jsem apache (již jsem zkoušel několikrát předtím) a zázrak je na světě..
Velice děkuji za ochotu řešit můj problém.