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
+
0
-

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
+
0
-
  1. 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');
  1. by bylo rozhodně lepší nepředávat errors šabloně (ale spíš přímo v šabloně metodou $form->getErrors() )
  2. chybí ti metoda pro zpracování formuláře (onSubmit[])

a vypnutí JS validace pro form:

$form->getRenderer()->setClientScript(null);
Pooik
Člen | 2
+
0
-

No nejsem phpkář, občas brečím i nad php (holt zvyk je železná košile), ale Nette se mi líbí moc.

Díky za pomoc, dobře jsi mě nakopnul, s projitím fóra se mi to podařilo dát do kupy a už to funguje.
Tím se snad vyřešil i další problém, že po odeslání se nedělo nic :-)

Tak díky

PetrP
Člen | 587
+
0
-

Ješté lépe si vytáhneš formulář takto:

$this['nezevKomponenty'];

Takže si to nemusíš ani dávat do pomocné proměné ale v šabloně normálně:

{foreach $presenter['nezevKomponenty']->errors as $error}