formuláře – získání hodnot z setdefaults při create

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

Ahoj, potřebuju pls poradit s tímto:

mám funkci pro vytváření formuláře:

protected function createComponentPageForm()
    {
...
        $form->addSubmit('send', 'Uložit');
        if(**co sem?**){
          $form->addSubmit('smazat', 'Smazat');
        }
        return $form;
    }

kterou chci používat jak na přidávání novejch postů, tak i na jejich editaci – a jen pokud edituju, tak chci zobrazit submit button pro mazání, při editaci předávam formu parametry přes setdefaults:

public function actionEdit($pageId)
{
    $page = $this->database->table('page')->get($pageId);
    if (!$page) {
        $this->error('Příspěvek nebyl nalezen');
    }else{
      $this['pageForm']->setDefaults($page->toArray());
    }
}

Moje otázka zní: existuje nějakej (pokud možno simple) způsob, jak v createComponentPageForm() získat hodnoty, který tam byly předány přes setdefaults? Jde mi o to, aby se podle nich mohl form vytvářet „na míru“ – např. viz. ta neúplná podmínka nahoře.

besanek
Člen | 128
+
0
-

Ne. createComponentPageForm probíhá dříve než setDefaults, takže ještě hodnoty nejsou k dispozici. Budeš to tam muset propašovat jinak, např. přes property presenteru.

class Presenter {

 private $isEditation = false;

 public function actionEdit($pageId)
{
    $page = $this->database->table('page')->get($pageId);
    if (!$page) {
        $this->error('Příspěvek nebyl nalezen');
    }else{
      $this->isEditation = true;
      $this['pageForm']->setDefaults($page->toArray());
    }
}

protected function createComponentPageForm()
    {
...
        $form->addSubmit('send', 'Uložit');
        if($this->isEditation){
          $form->addSubmit('smazat', 'Smazat');
        }
        return $form;
    }

}
pistolnik
Člen | 4
+
0
-

Přes globální proměnný se mi to dělat nechtělo, nepřišlo mi to upe jako best practise, ale když se actionEditsetDefaults volá až po createComponentPageForm (což jsem nevěděl, začínam) tak asi moc nemam na výběr. Každopádně děkuju za vysvětlení a funkční řešení :-)

besanek
Člen | 128
+
0
-

Ještě je tu možnost pracovat s databází v tom createComponentPageForm.

Ale spíš bych doporučil https://forum.nette.org/…nebo-tovarna

Můžeš předávat pole hodnot nepovinným argumentem, nebo ještě lépe jak je to v ukázce pouze IDčko a vytáhnout to až tam.