setDefaults z DB – u vykreslovani funguje, pri zpetnem ukladani ne
- shargath
- Člen | 8
Zdravim, mam form ve kterem nastavim vychozi hodnoty:
$form->setDefaults(array(
'id' => $this->template->post['id'],
'title' => $this->template->post['title'],
'body' => $this->template->post['body']
));
stranka se vykresli a vychozi hodnoty v polozkach formu jsou v poradku, po zmacknuti submit tlacitka mi to ale vyhodi chybu „The variable ‚post‘ does not exist in template“
cast callbacku:
$values = $form->getValues();
$id = $values['id'];
$data = array(
'title' => $values['title'],
'body' => $values['body'],
);
co delam spatne?
Editoval shargath (2. 8. 2011 14:52)
- Filip Procházka
- Moderator | 4668
Když se vykresluje formulář, pokud ho nevoláš v action
nebo
v render
, tak se volá až v šabloně. To znamená jako
poslední.
Když takový formulář odešleš, jeho zpracování probíhá pomocí
signálu. Signály se zpracovávají mezi action
a
render
. Pokud naplňuješ šablonu až v render. Logicky
v šabloně ještě neexistuje proměnná post
.
Nejlepší bude. Pokud si ty data, co máš v post
v šabloně
uložíš do presenteru.
private $post = array();
public function actionDefault($id)
{
$this->post = $this->nejakyModel->find($id);
// pokud nevykresluješ formulář vždy, tento řádek můžeš mít v továrničce.
$this['myForm']->setDefaults($this->post);
}
public function renderDefault()
{
$this->template->post = $this->post;
}
protected function createComponentMyForm()
{
$form = new Form();
// ...
return $form;
}
- shargath
- Člen | 8
HosipLan: dik, uz mi to funguje, zivotni cyklus presenteru jsem nejak opomenul
jeste bych mel dotaz ohledne $this->nejakyModel->find($id); ja jsem
zatim pouzival
jen \NejakyModel::find($id); pristup pres $this mi nefunguje, delam totiz
modularni aplikaci… chapu to spravne ze v teto situaci se dela
modelLoader?
- Filip Procházka
- Moderator | 4668
Je to v podstatě jedno. Když je registruješ po jednom do configu, je to lepší pro pozdější úpravy. Pokud máš model loader, je to snadnější na používání.