Neodeslání hodnoty formulářového pole v komponentě
- kubajz
- Člen | 47
Mám následující problém a pokud by tu byl někdo, kdo by byl schopný vysvětlit mi, co přesně se děje, že to nefunguje, budu mu velice zavázán:
V presenteru jsem pomocí továrničky vytvořil formulář, který přidá/edituje položku v databázi. Funguje to asi tak, že defaultně nové položky přidává a když v seznamu těchto položek na některou kliknu, že ji chci editovat, tak zavolám např. actionEdit($id), $id předám příslušné členské proměnné presenteru a přesměruji na view s formulářem. V továrničce na formulář pak je podmínka, která změní např. text elementu legend, přidá skryté formulářové pole s id, nastaví defaultní hodnoty apod.
Když jsem zkusil něco takového napodobit v komponentě, kde místo actionEdit volám např. handleEdit($id), tak formuláři sice přenastavím defaultní hodnoty, přidám nové pole, na stránce se vše vykreslí, ale vůbec se neodešle hodnota takto nově přidaných polí.
PHP 5.3.8, Nette 2.0.1
- Ot@s
- Backer | 476
Nevím, jestli jsem to pochopil, takže obecně a velmi zjednodušeně. Když
v presenteru použiješ actionEdit($id)
, dostáváš poždavek
o editaci přímo do URL a funguje ti to. V komponentě na to ale jdeš přes
signály (ono handleEdit($id)
) a to je špatně. Signály se totiž
vyvolávají přes „systémový“ parametr do=komponenta-handle
a jsou určeny jednorázový úkon (v metodě handleNeco většinou
i přesměrováváš). Submitnutí formuláře se taky zpracovává signálem,
takže je to neslučitelné se současným vyvoláním signálu.
V komponentě pak máš 2 možnosti, jak přenést do URL parametr:
- použij persistenci (idelani)
/** @persistent */
public $id;
/** @persistent */
public $what; // ukon, ktery chces delat s ID (EDIT, DELETE, atd...)
Dále už se o nic nestaráš a rovnou používáš
$this->id = 10;
, v šabloně
<a n:href="this, id=>10">edit</a>
apod. Pokud chceš
persist. parametr deaktivovat u přesměrování, stačí mu dát hodnotu NULL,
např.
$this->presenter->redirect('this', array('id'=>null, 'what'=>null));
.
- obsah URL si ovládáš „ručně“
v šabloně komponenty:
<a n:href="this, what=>edit, id=>100">edituj zaznam s ID 100</a>
V komponentě samotné jsou hodnoty z URL dostupné via
$this->getParameter();
:
$form = new Form();
// zajisteni prenosu ridicich parametru do dalsich pozadavku
$form->addHidden('what', $this->getParameter('what'));
$form->addHidden('id', $this->getParameter('id'));
// nasleduje zbytek definice edit.formulare
Editoval Ot@s (27. 7. 2012 8:46)