Forms – Komponenta, defaultná hodnota

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

Zdravím, mám Presenter v ktorom mám metodu:

public function renderEdit($id)
     {
         $this->template->recipe = $this->context->recipesReposity->getRecipe($id);
     }

Potom tam mám ešte metodu na vytvorenie komponenty:

public function createComponentEditRecipe()
     {
         $form = new Form;
         $form->addHidden('recipe_id');
         $form->addText('name', 'Název receptu:')
              ->setDefaultValue($this->template->recipe->name)
              ->setRequired('Musí být vyplneno!');
         $form->addTextArea('recipe', 'Recept: ')
              ->setDefaultValue($this->template->recipe->recipe)
              ->setRequired();
         $form->addUpload('preview_image', 'Obrázok: ')
              ->addRule(Form::MAX_FILE_SIZE, 'Maximálna veľkosť obrázku je 5 MB!', 1024*1024*5)
              ->addRule(Form::IMAGE, 'Súbor musí být obrázek!');
         $form->addSubmit('edit_recipe', 'Uložiť');
         $form->onSuccess[] = $this->saveRecipe;

         return $form;
     }

Keď stránku spustím tak je všetko v poriadku, chyba je až keď formulár odošlem – metóda komponenty sa spustí skôr ako metoda renderEdit a preto nemôže doplniť defaultné hodnoty. Mám pár návrhov ako to spraviť, ale podľa mňa sú zlé (nevalidné), tak by sa to podľa mňa robiť nemalo. A preto sa obraciam na vás – ako by ste túto situáciu riešili vy? Ďakujem za odpoveď :)

Editoval Juraj (27. 11. 2013 18:31)

jiri.pudil
Nette Blogger | 1028
+
0
-

Tohle chování je správné (odeslání formuláře se zpracovává jako signál).

Nepovažuji za šťastně předávat si recept přes šablonu. Spíš bych si ho v action* metodě uložil do property presenteru. V render* metodě ho pak můžeš předat do šablony a v továrničce jím naplnit formulář.

Editoval jiri.pudil (27. 11. 2013 18:50)

Juraj
Člen | 10
+
0
-

Ďakujem :)