Sdilena komponenta pro pridani i editaci

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

Jak resite situaci, pokud chcete mit jednu komponentu na editaci i pridani nejake polozky? V sablone ‚edit‘ nacitam komponentu todoForm a pres actionEdit do komponenty cpu predane ID editovane polozky – nicmene po odeslani se znovu zavola actionEdit a pri zpracovani formulare se tam tudiz nacpe hodnota z databaze a polozka ‚text‘ se nezmeni.

Nejlepsi by bylo asi nejak zjistit v actionEdit zda jiz byl formular odeslan? Nebo to resite uplne jinak?

<?php
public function createComponentTodoForm()
    {
        $form = new NAppForm;
        $form->addText('text', 'Ukol', 60, 100)
             ->addRule(NForm::FILLED, 'Musite vyplnit text!');
        $form->addSubmit('save', 'Ulozit');
        $form->addSubmit('back', 'Zpet')->setValidationScope(NULL);
        $form->onSubmit[] = callback($this, 'processTodoForm');
        return $form;
    }

    public function actionEdit($id)
    {
            $todo = $this->model->findTodo($id);
            $this['todoForm']->setValues(array('text' => $todo->text));
            $this['todoForm']->addHidden('id',$id);
    }
?>

Diky:)
Ja

redhead
Člen | 1313
+
0
-
  1. Používej setDefaultValues() a ne setValues(), kde to všichni začátečníci berou to setValues()?
  2. pracuj s ID v renderEdit a ne v actionEdit (action je volána před handlovaním submit metody formuláře, render až po ní)
  3. v submit metodě použij na konci $this->redirect(‚this‘), odstraní to znovu odeslání formuláře při refreshi (F5) a navíc zaručí, že bude brát správný text z databáze (modelu).
Ja
Člen | 260
+
0
-

redhead:

  1. asi's myslel setDefaults, co se tyce setValues, tak jsem na tudle metodu prisel primo z nette api
  2. diky moc, to je presne ono! uz mi konecne zacinaji dochazet souvislosti, ktery mi predtim unikaly
  3. ano, v tutorialu redirect byl i zduraznen

jeste jednou diky moc, odseklo me to.

redhead
Člen | 1313
+
0
-

Ja napsal(a):

1. asi's myslel setDefaults, co se tyce setValues, tak jsem na tudle metodu prisel primo z nette api

Ano, zamíchal jsem do toho metodu, kterou vlastní prvky formuláře (setDefaultValue() pro prvek podle jména a setDefaults() pro všechny prvky podle pole)