Odeslání formuláře bez reakce

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

Zdravím,

Už si nevím rady čím to je, ale nejde mi odeslat formulář, ani se neprovede validace. Prohledal jsem zde známá témata ale nic z toho mi nepomohlo.

Prsenter

protected function createComponentNewPageForm()
	{
		$form = new Nette\Forms\Form;

		$form->addtext('name')
			 ->setRequired('Zadejte jméno stránky')
			 ->setAttribute('class', 'art')
			 ->setAttribute('autofocus')
			 ->setAttribute('placeholder', 'Název stránky')
			 ->setRequired();

		$form->addTextArea('context')
			 ->setAttribute('class', 'art txtar')
			 ->setAttribute('id', 'editor')
			 ->setAttribute('placeholder', 'Text stránky...')
			 ->setRequired();

		$form->addSelect('template', '', $this->database->table('pages_template')->order('name ASC')->fetchPairs('id', 'name'))
			 ->setPrompt('Vyberte šablonu')
			 ->setAttribute('class', 'fka')
			 ->setRequired();
		$form->addCheckbox('hide', 'Veřejná stránka')
			 ->setAttribute('class', 'fka')
			 ->setRequired();

		$form->addSubmit('send', 'Odeslat')
			 ->setAttribute('class', 'button');

		$form->onSuccess[] = $this->processNewPageForm;

		return $form;
	}

	/**
	 * @param \Nette\Application\UI\Form
	 */

	public function processNewPageForm($form)
	{
		$values = $form->getValues();

		$pageId = $this->getParameter('pageId');
		if ($pageId) {
			$page = $this->database->table('pages')->get($pageId);
			$page->update($values);
			$this->flashMessage('Stránka byla upravena');
		} else {
			$page = $this->database->table('pages')->insert($values);
			$this->flashMessage('Stránka byla přidána', 'success');
		}
		$this->redirect('Pages:default');
	}

Vykreslení formuláře

{form newPageForm}

					<fieldset class="leftside">
						{input name}
						{input context}
					</fieldset>

					<fieldset class="RightSide">
					<div class="RightSideHead">
						<i class="fa fa-flag-o"></i>
						<span>Vlastnosti stránky</span>
					</div>

					<div class="chkbx">

							{label hide/}
							{input hide}
							{input template}

					</div>

					{input send}

					</fieldset>
				{/form}

Budu rád za každou radu, děkuji.

JakubJarabica
Gold Partner | 184
+
0
-

Vymeň

<?php
$form = new Nette\Forms\Form;
?>

za triedu, ktorá vie spracovávať signály:

<?php
$form = new Nette\Application\UI\Form;
?>

… a pôjde ti to.

Zechy
Člen | 24
+
0
-

Změnil jsem to, ale pořád beze změny.

Nevím jestli to má na to vliv, ale používám 2 moduli. AdminModul a FrontModul. Tento formulář se vykresluje v AdminModulu pouze.

Šaman
Člen | 2666
+
0
-

Zkus ho nejprve vykreslit bez šablony, jen {control newPageForm}, třeba ti neprojde validací, ale ty si chyby nevypisuješ.

Tomáš Votruba
Moderator | 1114
+
+1
-

Také pomůže přidat callback pro onError, přípdaně použít $form->getErrors().

$form->onSuccess[] = $this->processNewPageForm;
$form->onError[] = $this->newPageFormFailed;

public function newPageFormFailed($form)
{
	dump($form->getErrors());
}

Editoval Tomáš Votruba (27. 4. 2014 20:02)

Zechy
Člen | 24
+
0
-

Zkusil jsem obě varianty a bohužel beze změny :/

n.u.r.v.
Člen | 485
+
0
-

v těhle případech mi pomohlo si formulář nejprve zjednodušit na úplné minimum – nech jen jeden textový input a bez pravidel – aby si zkusil a v metodě pro zpracování formuláře si udělej jen výpis toho inputu (nap. do flashmessage)…

Tím zjistíš zda se vůbec formulář zpracovává…pak postupně přidávej pravidla a další prvky formuláře…Tak zjistíš, kde se to kousne…

mdjimy
Člen | 9
+
0
-

Tak co podařilo se ti dohledat chybu?

Zkoušel jsem tvůj kód u tím, že jsem použil UI Form a funguje mi bez problémů.

Pokud jsem to správně pochopil, tak ti ani nefunguje validace & odesílání na client-side…

Být tebou tak bych hledal odpověď v konzoli… zkus se kouknout, jestli ti to na něčem nepadá…

Z vlastní zkušenosti pak ještě doporučuji promazat temp složku. ;)