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 | 149
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?
- duke
- Člen | 650
- 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 makraform
čicontrol
. - 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í metodyupdate
(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 metoduwhere
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)