Forms – Komponenta, defaultná hodnota
- Juraj
- Člen | 10
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 | 1032
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)