Standardní validace vrací bez javascriptu 0 chyb
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Pooik
- Člen | 2
Ahoj,
už pár dní bojuji s NETTE a myslím, že docela úspěšně.
Teď jsem se ale zasekl u formulářů. Konkrétně jejich validaci.
V presenteru mám metodu renderDefault:
<?php
public function renderDefault($id)
{
$this->template->clanek = Clanek::Load($id);
$this->template->komentare = Komentar::LoadList($id);
$this->template->title = $this->template->clanek->nazev;
$form = $this->createCommentForm();
$this->template->form = $form;
$this->template->errors = $form->getErrors();
}
?>
metodu createCommentForm mám jako privátní přímo v presenteru:
<?php
private function createCommentForm()
{
$form = new AppForm;
$form->addText('nadpis', 'Nadpis:', 50)->addRule(Form::FILLED, 'Zadejte název komentáře.');
$form->addText('jmeno', 'Jméno:', 20)->addRule(Form::FILLED, 'Zadejte Vaše jméno.');
$form->addText('web', 'Web ():');
$form->addTextArea('komentar', 'Komentář:')->addRule(Form::FILLED, 'Napište text komentáře.');
$form->addSubmit('send', 'Přicvaknout na zeď')->setValidationScope(TRUE);
return $form;
}
?>
v templatu se pak snažím vykreslit všechny chyby ručně:
<?php
{if sizeof($errors) > 0}
<div id="errors">
<ul>
{foreach $errors as $error}
<li>{$error}</li>
{/foreach}
</ul>
</div>
{else}
počet chyb = {? echo sizeof($errors)}
{/if}
?>
Pokud jsem měl zapnutý javascript, vše fungovalo. Jakmile jsem ho vypnul (a zde bych se chtěl zeptat, jak ho vypnout na formuláři, protože já si ho zatím vypnul jen v prohlížeči), zásadně dostávám 0.
Díky moc.
- redhead
- Člen | 1313
- továrnička je špatně, mělo by být createComponent<nazevKomponenty>() takhle se ti formulář nepřipojí k presenteru. A šabloně předávat formulář
$this->template->form = $this->getComponent('nezevKomponenty');
- by bylo rozhodně lepší nepředávat errors šabloně (ale spíš přímo v šabloně metodou $form->getErrors() )
- chybí ti metoda pro zpracování formuláře (onSubmit[])
a vypnutí JS validace pro form:
$form->getRenderer()->setClientScript(null);