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
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
- Používej setDefaultValues() a ne setValues(), kde to všichni začátečníci berou to setValues()?
- 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í)
- 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
redhead:
- asi's myslel setDefaults, co se tyce setValues, tak jsem na tudle metodu prisel primo z nette api
- diky moc, to je presne ono! uz mi konecne zacinaji dochazet souvislosti, ktery mi predtim unikaly
- ano, v tutorialu redirect byl i zduraznen
jeste jednou diky moc, odseklo me to.