generovanie formularu z dat z modelu
- Bernard Williams
- Člen | 207
Nazdárek,
jde to třeba takto:
public function actionEdit($id) {
$sql = dibi::query('SELECT * FROM ['.TABLE_XY.'] WHERE id=%i;', $id);
if (count($sql)) {
$form = $this->getComponent('edit');
$row = $sql->fetch();
$form->setDefaults($row);
$this->template->form = $form;
}
else {
$this->flashMessage('... not exist.');
$this->redirect('Presenter:');
}
}
Bernard
Editoval Bernard Williams (18. 4. 2010 18:27)
- marek.dusek
- Člen | 99
Tak ten příklad by mě hodně zmátl – zaprvé je to jen „půlka“ (ty bys na jeho místě pochopil, co je v tom $this->getComponent(‚edit‘)?) a zadruhé je to zbytečně složitě ;) Když už, tak:
$this['edit']->setDefaults($sql->fetch);
.. nicméně nemyslím, že to odpovídá na původní dotaz, který je napsán tak strašně, že poprosíme autora, aby se nadechl a zkusil to napsat jako člověk ;)
EDIT: a ještě tam máš gramatickou chybu – not exists :-)
Editoval marek.dusek (18. 4. 2010 18:46)
- Mikulas Dite
- Člen | 756
Podle mě se jedná o to, že mino potřebuje ty data jak v
renderFoo()
, tak v createComponentBar()
. A nemusí se
jednat jenom o setDefault[s]
. To se ale zjednoduší, když budou
data zabalená v modelu (a snad tvoje db nějakou cache má, takže výkonově
je to skoro jedno).
- redhead
- Člen | 1313
Nedalo by se nějak využít informací o tabulce? Jsou tam na to nějaké metody, které ti řeknou typy sloupců, atd..
dibi::getDatabaseInfo()->getTable($name)->...
By ti to mohla vracet nějaká metoda v modelu (případně můžeš cachovat) a podle toho vytvářet automaticky formuláře, možná včetně max délky znaků u VARCHAR atd..
marek.dusek napsal(a):
$this['edit']->setDefaults($sql->fetch);
Ty zas chybu u fetch() ;)