jak dostat SQL data do compomenty i šablony

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

Snaha je taková.. Potřebuji dostat informace o zboží do šablony + to samé zboží i do komponenty formuláře. A nechci provádět ten samý dotaz 2×.

<?php
// pokud je $id tak se edituje, pokud ID není, tak přidávám nové zboží
public function renderGood($id = null) {
	if ($id != null) {
		$this->good = dibi::fetch("SELECT * FROM goods WHERE id = %i", $id);
	}
	$this->template->good = $this->good; //vyuziva defaulni hodnoty
}
//tovarnicka pro pridani / editovani zbozi
protected function createComponentGood() {
	$form = new AppForm();
	$id = $this->getParam('id');
	if (!empty($id)) { // id neni prazdne
		$values = $this->good; //vyuzije naplneni dat v renderGood
	}
	$form->setValues($values);
}
?>

Bohužel toto řešení mi funguje pouze při vykreslení formuláře.. Při odeslání formuláře nastane chyba, protože renderCosi ještě neproběhlo. A zrovna mne nenapadá elegantní řešení. Ano, mohu ten SQL dotaz zavolat 2×, ale myslel jsem, jestli to neřešíte jinak.

Editoval zacatecnik (26. 7. 2011 22:08)

Majkl578
Moderator | 1364
+
0
-

Tak použij akci (action), ne?

MzK
Člen | 127
+
0
-

akce nejde použít, protože pouhým odkazem nejde zvolit počet zboží widget (eshop)..
Takže musím použít formulář.

newPOPE
Člen | 648
+
0
-

@majkl mal na mysli ze namiesto

<?php
	renderGood(...);

//napises

	actionGood(...);
?>

action sa spracovava skor, cize data by uz v template mali byt.

a pokial su to tie iste data tak by som to asi napisal takto

<?php

public function actionGood($id) {
	...
	$this->template->good = dibi::fetch(...);
}

public function createComponentGoodForm() {
	...
	$form->setValues($this->template->good);
	...
}
?>

pride mi to ako menej kodu