nefunkční update tabulky z formuláře

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

Zdravím,
podle quickstartu vyrábím formulář, který má aktualizovat tabulku. Takže v presenteru je

<?php
	public function renderForm($id) {
		$this->template->nem = $this->nem->getNem($id);
		$this->template->form       = $this->createComponentNemForm($id);
	}

	protected function createComponentNemForm($id) {
		$form = new Form();
		$form->addText('zastaveno', 'zastavěno:', 7, 7)->setType('number')
			->setDefaultValue($this->template->nem->zastaveno);
		$form->addText('osvobozeno', 'osvobozeno od daně:', 7, 7)->setType('number')
			->setDefaultValue($this->template->nem->osvobozeno);
		$form->addText('msg', 'poznámka:', 60, 100)->setDefaultValue($this->template->nem->msg);
		$form->addSubmit('create', 'Ulož');
		$form->onSuccess[] = $this->nemFormSubmitted;
		return $form;
	}

	public function nemFormSubmitted(Form $form) {
		$this->nem->updateNem($this->nem->id, $form->values->zastaveno,
			$form->values->osvobozeno, $form->values->msg); //volani aktualizacni metody s parametry
		$this->flashMessage('Provedeno.', 'success');
		$this->redirect('this');
	}
}

//updateNem je metoda modelu:
	public function updateNem ($id, $zastaveno, $osvobozeno, $msg) {
		return $this->connection->table('nem')->update(array(
			'zastaveno'  => $zastaveno,
			'osvobozeno' => $osvobozeno,
			'msg'        => $msg,
			'edited'     => new \DateTime()))->where("id=?", $id);
	}
?>

Formulář se zobrazí, data načte, nehlásí žádnou chybu, ale aktualizaci neprovede a aktualizovaná hodnota z formuláře vypadne. Také nevidím v debug baru žádný dotaz typu update. Nevíte, kde dělám chybu?

ricco24
Člen | 141
+
0
-

Používaš PHP 5.3 ? Ak ano používaš Nette\Application\UI\Form ?

jik
Člen | 146
+
0
-

Ano:
php verze php5–5.3.15–1.4.1.x86_64 (toto na OpenSUSE 12.2rc2, podobně i 12.1)
presenter ubsahuje

<?php
use Nette\Application\UI\Form;
?>
duke
Člen | 650
+
0
-
  • Továrnička createComponentNemForm není určena k tomu, abys ji volal přímo, jak to děláš v render metodě. Nahraď volání např. zápisem $this['nemForm'], nebo ještě lépe nech to až na šablonu prostřednictím makra form či control.
  • Továrnička createComponentNemForm by neměla mít parametry.
  • Voláš-li metodu update nad objektem Table\Selection, mělo by volání metody where předcházet volání metody update (jinak ti ten update změní všechny řádky v tabulce).
  • Metoda update vrací integer (počet změněných řádků), takže tvá konstrukce skončí chybou pokusu volat metodu where ne-objektu (integeru). To, že ti to tu chybu zatím nehází, znaméná, že ten kód se ještě nikdy nevykonal (patrně kvůli tomu, jakým způsobem voláš tu továrničku, ale to jen hádám).
  • Vzhledem k tomu, že po updatu redirektuješ, tak nečekej, že pokud vše proběhne bez chyb, že v debug baru uvidíš zalogovaný update.

Editoval duke (16. 8. 2012 16:25)

jik
Člen | 146
+
0
-

Po překopání funguje, děkuji.