Jeden formulář pro přidání i editaci
- Twista
- Člen | 48
Zdravím,
konečně jsem se pustil do Nette a právě jsem se zasekl na tom jak řešit jeden formulář pri editaci i přidání do databáze
vyvořil jsem si adminPresenter i model, kde mám autetifikaci a výpis položek(editace/pridani)
pro pridani jsem si vytvoril formular
protected function createComponentBlogPost() {
$form = new UI\Form;
$form->addText('nazev', 'Název:', 40, 100)
->addRule(UI\Form::FILLED, 'Je nutné zadat název příspěvku.');
$form->addTextArea('text', 'Text:');
$form->addSubmit('create', 'Vytvořit');
$form->onSuccess[] = callback($this, 'blogPostSubmitted');
return $form;
}
to dal do makrat,
pote vytvoril funci na editovani co mi nastavi hodnoty do formulare(v latte
stejny control)
public function actionBlogEdit($id){
$data = $this->model->getById($id)->fetch();
$this['blogPost']->setDefaults(array(
'nazev' => $data['nazev'],
'text' => $data['text'],
));
}
a ted nevim jak nejak elegatne vyresit ukladani, napadlo me neco jako unsetnou callback a pridat novy v action, ale nezda se mi to
dekuji za rady
- Ot@s
- Backer | 476
Z hlavy +/-
Naplneni vych. hodnot do formulare
public function actionBlogEdit($id){
$data = $this->model->getById($id)->fetch();
$this['blogPost']->setDefaults(array(
'id' => $data['id'], // nebo $id (toto pridat)
'nazev' => $data['nazev'],
'text' => $data['text'],
));
}
Def. formulare
protected function createComponentBlogPost() {
$form = new UI\Form;
$form->addHidden('id'); // (toto pridat)
// atd....
}
Zpracovani
protected function blogPostSubmitted($btn) {
$values = $btn->form->getValues();
// pripadne upravy hodnot v $values
if (empty($values->id))$this->model->getTable('blog')->insert($values); // insert
else $this->model->getById($values->id)->update($values); // update
// flashMessage
// presmerovani
}
Editoval Ot@s (9. 1. 2012 9:25)
- PavelJurasek
- Člen | 39
rád bych se zeptal, zda se dá ještě k tomu nějak upravit popisky např. buttonu (popisek přidat/upravit)
- pta
- Člen | 11
Twista: jeste jedna mala rada z praxe, ktera by se ti mohla hodit: osobne pouzivam stejnou komponentu na pridavani i editaci a s ni i dve akce pro pridani a editaci (actionNewNeco a actionEditNeco). Ale pouzivam jen jednu sablonu pro obe akce ‚newNeco.latte‘, kde mam makro pro vykresleni formulare. Jednoduse v actionEditNeco nastav na konci view:
public function actionEditNeco($id)
{
...
// bud
$this->setView('newNeco');
// nebo rovnou
$this->view = 'newNeco';
}
Nedochazi k presmerovani. Pouze tim rikas, ze chces pro tuto akci pouzit sablonu newNeco.latte takze odpadaji duplicity.