generovanie formularu z dat z modelu

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

Prepisujem jednu starsiu aplikaciu do nette a s tymto si neviem rady.
v actionShow natiahnem data z db a okrem ineho ich chcem pouzit aj na generovanie formulara lenze nieviem ako to prepojit. Asi banalita ale este v tom neviem chodit.

Editoval mino (25. 4. 2010 20:57)

Bernard Williams
Člen | 207
+
0
-

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

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

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

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() ;)