action nema kompletni url a chyby ID
- Tom_as
- Člen | 28
Zdravim,
mam url /admin/articles/update/98 a formular se vykresli jako <form id=„frm-update“ method=„post“ action=„/admin/articles/update?do=update-submit“>, bohuzel zde chyby ID 98 a kdyz odeslu data tak nastane chyba protoze do formulare dostavam data z db.
Router mam
$adminRouter[] = new Route('admin/<presenter>/<action>[/<id [0-9]+>]', 'Default:default');
Nevite nekdo jak dostat id do rmulare bez toho abych musel pouzit setAction?
Nete mam 2.0.3.
- ViPEr*CZ*
- Člen | 817
No já to jako nečisté řešení nevnímám… při editu se mi nastaví hodnota do skrytého pole a při odeslání formu se odešle na server, navíc si můžu přes Nette nastavit, že tato hodnota při odeslání formu je vyžadována, takže kdyby se něco po*, tak form nebude validní. Odesílání se provádí přes POST. To co chceš ty by bylo akorát přes GET v url, ale stejně se to tam musí nějak dostat. Jinak nevidím smysl pro skrytá pole v html, když už bych je nemohl tímto či podobným způsobem využívat a mělo by to být nečisté řešení. Ještě mě napadá, že by jsi mohl využít tzv. persistentní parametr i když ty skrytá pole se mi teda osobně líbí více.
- Tom_as
- Člen | 28
Nakonec jsem tu spichnul takto:
protected function createComponentUpdate($id){
$model = new \AdminArticlesModel();
$id = ($this->getParam("id")) ? $this->getParam("id") : $this->request->post['id_menu'];
$r = $model->getArticle($id);
$form = new Form();
$form->addText('title_menu', 'Název kategorie:')
->setRequired("Zadejte název kategorie")
->setValue($r->name);
$form->addText('title_page', 'Nadpis stránky:')
->setRequired("Zadejte titulek stránky")
->setValue($r->title);
$form->addText('text', 'Obsah stránky:')
->setRequired("Zadejte obsah stránky")
->setValue($r->text);
$form->addHidden("id_article", $r->id_article);
$form->addHidden("id_menu", $r->id_menu);
$form->addSubmit('submit', 'Uložit kategorii');
$form->onSuccess[] = callback($this, 'UpdateFormSubmitted');
return $form;
}
public function UpdateFormSubmitted($form)
{
$values = $form->getValues();
$model = new \AdminArticlesModel();
$r = $model->Update($values);
if($r){
$this->flashMessage("Kategorie byla aktualizována", 'info');
$this->redirect('Articles:update', array('id' => $values->id_menu));
}else{
$this->flashMessage("Nastala chyba ".$r, 'error');
$this->redirect('Articles:update', array('id' => $values->id_menu));
}
}
- ViPEr*CZ*
- Člen | 817
Jj to jsem měl takhle na mysli. Předpokládám, že to takhle máš v Presenteru, pak bych to celé vyhodil do extra souboru někde do složky components. Parametr id v createComponent ani nevyužíváš, tak tam být nemusí. A takhle třeba jak to máš voláš 2× new AdminArticlesModel, což před extra třídu pro komponentu by jsi nemusel. A docela by mě zajímalo jak vypadá ten model, když v tomhle samplu se tam nikde nedostane database?
- awsickness
- Člen | 98
a neslo by tohle resit pres persistent parametr ?
https://doc.nette.org/…n/presenters#…
- ViPEr*CZ*
- Člen | 817
awsickness napsal(a):
a neslo by tohle resit pres persistent parametr ?
https://doc.nette.org/…n/presenters#…
Vždyť jsem o tom psal :-)