Formuláře – rozeznání typu podle url
- Duch.Veliky
- Člen | 68
Zdravím,
mám dotaz. Jakým způsobem řešíte editaci/vkládání záznamů, když to taháte přes jeden formulář? Já mám jeden formulář a potom podle URL poznávám, jestli se jedná o editaci nebo nový záznam a podle toho tam načtu výchozí záznamy nebo nenačtu, např:
/produkty/vlozit
/produkty/upravit/1
V podstatě je to vyhovující, protože si akorát zavolám že při editaci se mají načíst výchozí hodnoty:
<?php
protected function createComponentFormularKategorie() {
$form = new Nette\Application\UI\Form;
$form->addText('nazev', 'Název:')
->setAttribute('placeholder', 'Vložte název kategorie')
->setRequired('Je potřeba vyplnit název kategorie.')
->getControlPrototype()->setClass('form-control');
$form->addSelect('patri_pod', 'Kategorie:', $this->kategorie_select)
->getControlPrototype()->setClass('form-control input-large');
$form->getElementPrototype()->class = 'form-horizontal';
// Pokud upravujeme, tak nastavíme výchozí hodnoty
if ($this->akce == "upravit") {
// načteme výchozí hodnoty
$hodnoty = $this->database->table("shop_produkty_kategorie")
->where("id", $this->id)
->fetch();
$form->setDefaults(array(
"nazev" => $hodnoty->nazev,
"patri_pod" => $hodnoty->patri_pod
));
}
$form->onSuccess[] = $this->formularKategorieOdeslan;
return $form;
}
?>
Jenže problém je v tom, že při zpracování formuláře nejsem schopen zjistit z URL jestli se jedná o editaci a případně ID záznamu, což znamená, že bych si musel ještě posílat tyto inputy:
<input type="hidden" name="akce" value="upravit" />
<input type="hidden" name="id" value="5" />
a to mi přijde už trochu zbytečné, když to mám v URL. Jenže router to předá presenteru až po odeslání toho formuláře. Tak zkoumám, jestli je běžné tam posílat ty hodnoty přes hidden nebo jestli je jiná cesta.
<?php
$router[] = new Route('//admin.%domain%/produkty/kategorie[/<akce>/<id [0-9]+>]', 'Admin:ProduktyKategorie:vypis');
?>
- Hafran
- Člen | 121
No já to osobně přes hidden posílám, stačí ti id, protože když není definované, tak to znamená že se vkládá, když je, tak edituješ. Jestli to je v administrační části a dá se zabezpečit, že tam nebude žádný filuta co ti tu hodnotu bude přepisovat, tak je to podle mě dostačující. Kontrolovat oprávnění na editaci třeba přihlášeného uživatele na konkrétní id bych ale určitě dělal.
- leninzprahy
- Člen | 150
Zpracování formuláře probíhá na stejné kombinaci Module:Presenter:action, jen se volá navíc signál, takže zjištění těch parametrů (akce, id) by mělo být stejné, jako při vykreslování…
Editoval leninzprahy (17. 9. 2014 11:53)