Dynamický počet persistentních proměnných
- pidiclovek
- Člen | 91
Ahoj, podobně jako v tomhle vláknu i já používám get form k sortu nějakých dat. Sort chci zachovat samozřejmě i na další stránce, logicky dospívám k persistentním parametrům v url, díky čemuž jsem našel i výše uvedené vlákno.
Jenomže zde jsem se zasekl a zatím se mi nepodařilo najít hezké
řešení – jak persistovat indexované pole?
Můj formulář je totiž dynamický a pokaždé je tak počet proměnných a
jejich názvy, které by bylo třeba přenést, jiný.
Se session mi to funguje vpohodě, ale používat kvůli tomuhle session se mi vůbec nelíbí. Budu vděčný za jakékoliv popostřčení :)
- pidiclovek
- Člen | 91
Ha! Slevuji na požadavcích, už jsem to převymyslel tak, že mi postačí obyčejné pole, již jen jedno. Otázkou ale stále zůstává, jak persistovat pole tak, aby se v GET projevilo jak např.: potvrzený multiselect? Něco jako:
/** @persistent */
public $foo;
/**
* Get persistent parameter
* @return array persistants
*/
public static function getPersistentParams() {
return array('foo');
}
public function actionDefault() {
$this->foo = array(3,4);
}
By se projevilo v url jako foobar.com?foo=3&foo=4
- Filip Procházka
- Moderator | 4668
pidiclovek napsal(a):
Jenomže zde jsem se zasekl a zatím se mi nepodařilo najít hezké řešení – jak persistovat indexované pole?
https://doc.nette.org/cs/forms#…
Aby se projevilo v url jako foobar.com?foo=3&foo=4
Když se na tu url podíváš pořádně, tak ti třeba dojde, jaká je to hloupost :) Správně tedy
foobar.com?foo[]=3&foo[]=4
A to se dělá takto
$this->redirect('this', array('foo' => array(3, 4)))
- pidiclovek
- Člen | 91
Na loadState() a spol se podívám, díky! :)
Každopádně @Hosiplan: Jsem to ale pako :) že mě nenapadne takhle jednoduchý řešení, díky Filipe! Jinak jsem myslel ty parametry jako pole, url si pochopil správně, já tam jen ty závorky zapomněl napsat :) Díky!
S tím kontejnerem jsi to prosím myslel jak? Už jsem s nimi kdysi experimentoval, ale pořádně jsem asi ještě nepochopil, k čemu bych je měl ve formulářích využívat, dokumentace v tomhle pokulhává
- Filip Procházka
- Moderator | 4668
Kontejnery ti vytváří zanoření inputů. Příklad:
$form->addText('name');
$form->addText('city');
$form->addText('zip');
vygeneruje
<input type="text" name="name">
<input type="text" name="city">
<input type="text" name="zip">
Pokud ale použiješ Container
$form->addText('name');
$address = $form->addContainer('address');
$address->addText('city');
$address->addText('zip');
tak ti z toho poleze
<input type="text" name="name">
<input type="text" name="address[city]">
<input type="text" name="address[zip]">
Což se bude chovat jako pole i výsledek bude v poli
$form->getValues(TRUE) === array(
'name' => NULL,
'address' => array(
'city' => NULL,
'zip' => NULL,
)
)
U GET formulárů se ti to dokonce rovnou dostane do URL v poli :)
- pidiclovek
- Člen | 91
@Hosiplan: Tak to je ovšem bomba, to řeší mé problémy s checkboxy, které jsem si už málem podědil a přepsal tak, aby mohly být poli. Díky moc za vysvětlení.
Já nemám práva dokumentaci editovat, ale bylo by skvělé přesně tyto kusy kódu tam najít, jsou perfektně sebevysvětlující. :)
Díky všem zúčastněným za pomoc :)