Nefunkční validace pomocí addRule
- Jakub
- Člen | 30
Ahoj,
nedaří se mi rozchodit validaci pomocí addRule(NForm::FILLED, ‚Message‘);. Pokud všechny prvky formuláře vyplním, všechno je OK a formulář se v pořádku odešle. Pokud však nějaký prvek s podmínkou addRule(NForm::FILLED, ‚Message‘); nevyplním, stránka se přesměruje na adresu ?do=addForm-submit a k odeslání formuláře nedojde.
Používám verzi Nette Framework 0.9.7 pro PHP 5.2, v hlavičce @layout.latte mám vložen soubor netteForms.js.
Tady je zdrojový kód:
protected function createComponentAddForm()
{
$form = new NAppForm;
$form->addText('name', 'Name:')
->addRule(NForm::FILLED, 'Please provide a name.');
$places = new Places;
$list = $places->getTypesSelect();
$form->addSelect('type', 'Type:', $list);
$list = array(0=>'No', 1=>'Yes');
$form->addSelect('indoor', 'Indoor:', $list);
$form->addTextarea('description', 'Description:')
->addRule(NForm::FILLED, 'Please provide a description.');
$list = $places->getEquipmentSelect();
$checkboxlist = $form->addContainer('checkboxlist');
foreach($list as $key=>$equipment){
$checkboxlist->addCheckbox($key, $equipment);
}
$list = $places->getCountriesSelect();
$form->addSelect('country', 'Country:', $list)
->skipFirst('-- Select country --')
->addRule(NForm::FILLED, 'Please select country.');
$form->addText('new_city', 'City:')
->addRule(NForm::FILLED, 'Please fill in a city.')
->getControlPrototype()->onKeyUp("initialize();")
->onBlur("initialize();");
$form->addText('search_address', 'Address:')
->getControlPrototype()->onKeyUp("initialize();")
->onBlur("initialize();");
$form->addHidden('longtitude');
$form->addHidden('latitude');
$form->addText('address');
$mimeTypes = array('image/*');
$form->addFile('photo1', 'Photo 1:')
->addCondition(NForm::FILLED)
->addRule(NForm::MAX_FILE_SIZE, 'Max. file size is 2Mb.', 2000000)
->addRule(NForm::MIME_TYPE, 'Invalid file extension!', $mimeTypes);
$form->addFile('photo2', 'Photo 2:')
->addCondition(NForm::FILLED)
->addRule(NForm::MAX_FILE_SIZE, 'Max. file size is 2Mb.', 2000000)
->addRule(NForm::MIME_TYPE, 'Invalid file extension!', $mimeTypes);
$form->addFile('photo3', 'Photo 3:')
->addCondition(NForm::FILLED)
->addRule(NForm::MAX_FILE_SIZE, 'Max. file size is 2Mb.', 2000000)
->addRule(NForm::MIME_TYPE, 'Invalid file extension!', $mimeTypes);
$form->addSubmit('add', 'Add');
$form->onSubmit[] = callback($this, 'addFormSubmitted');
return $form;
}
EDIT: Ještě doplním, že Firefox chybová konzole nevrací žádnou chybu.
Díky za každou pomoc.
Editoval Jakub (9. 3. 2011 18:31)
- studna
- Člen | 181
Místo NForm::FILLED
používej spíš
$form::FILLED
. A nefunguje ti validace na straně klienta
nebo serveru?
btw. nevykresluješ formulář ručně?
U této starší verze je (tuším) pořád generování javascriptu pro
obsluhu formuláře, chyba je tu. netteForms.js
tady
nehraje roli.
Editoval studna (9. 3. 2011 21:02)
- Jakub
- Člen | 30
Ten tam mám a také se správně vykreslí. Jinak počáteční značka form je trochu jinak (chybí volání validační fce), než u druhého projektu, kde JavaScript je. Pro porovnání:
Problémový projekt:
<form action="url" method="post" id="frm-addForm" enctype="multipart/form-data">
Fungující validace:
<form action="url" method="post" id="frm-addForm" enctype="multipart/form-data" onsubmit="return nette.validateForm(this)">
- Jakub
- Člen | 30
Zkusil jsem to upravit dle dokumentace na $form->onSubmit[] = ‚addFormSubmitted‘;, ale stále nic… :( Třeba příjde ještě někdo, kdo bude vědět, jak to opravit. Každopádně díky moc za pomoc, alespoň vím, kde přesně chyba je :)
- Patrik Votoček
- Člen | 2221
Jakub napsal(a):
Používám verzi Nette Framework 0.9.7 pro PHP 5.2, v hlavičce @layout.latte mám vložen soubor netteForms.js.
v Nette 0.9.x a starších se nic jako
netteForms.js
nepoužívá! To je až od
Nette 2.0!
$form->onSubmit[] = callback(...);
na to nemá vliv. Tohle je
čistě backendová část.
Kouknu jak to je v 0.9.x řešené a dám vědět (už ho víc jak rok
nepoužívám).
EDIT: zkus si dumpnout
$form->getRenderer()->getClientScript();
- Patrik Votoček
- Člen | 2221
pokud ti ani chybová konzole ve FF nehodí chybu hledal bych jestli se
netteForms.js
vůbec načte
- studna
- Člen | 181
Jestli se ti netteForms.js
načítá, zkus dát na konec
stránky něco jako:
<script type="text/javascript">
$('form').submit(function(){ return Nette.validateForm(this);});$(':input').blur(function(){ Nette.validateControl(this);});
</script>
(Musíš načíst ještě jQuery) Stane se něco?
Popřípadně stáhnout nejnovější netteForms.js
.