Jak donutit formulář aby se nevyplňoval
- ViliamKopecky
- Nette hipster | 230
Když mám formulář například na přidání nového uživatele, po odeslání se script vrátí na stejnou stránku, ale automaticky se tam vyplní předešlé údaje, hodilo by se, aby tam byly zase prázdná políčka.
Řešení bych viděl, že bych si udělal
setDefaults(array("foo"=>"","bar"=>"",...))
Ale to není
uplně ideální…
- Panda
- Člen | 569
$form->setDefaults(array());
nebo si do třídy Form dopsat funkci, která nastaví vlastnost populated na TRUE (nebo rovnou do třídy přidat vlastnost např. populateData a upravit metodu populate, aby když daná vlastnost bude false, tak aby nic nevyplňovala).
Přesměrování je dle mého skromného názoru zbytečné.
//Úprava: takhle po ránu mi to nějak nemyslí… Není potřeba upravovat třídu, jen jí stačí vhodně rozšířit:
class ExForm extends Form
{
/**
* Fill-in with HTTP data by defaut?
*
* @var bool
*/
protected $populateData = true;
/**
* Fill-in with HTTP data
*
* @param bool $ignorePopulateData Force fill-in the form and ignore $populateData?
*/
public function populate($ignorePopulateData = false)
{
if($ignorePopulateData || $this->populateData)
parent::populate();
}
public function getPopulateData()
{
return $this->populateData;
}
public function setPopulateData($value)
{
$this->populateData = $value;
}
}
A pokud z nějakého důvodu budeš chtít data vyplnit (např. při špatně vyplněných datech, aby je jen uživatel mohl upravit a ne celé vyplňovat znova), tak stačí zavolat
$form->populate(true);
Editoval Panda (8. 7. 2008 11:40)
- ViliamKopecky
- Nette hipster | 230
LM napsal(a):
Proč to nepřesměruješ po úspěšném vytvoření toho uživatele?
Protože tady mi to právě taky dělá to samý.
<?php
$form->setDefaults(array());
?>
nebude fungovat, protože setDefaults prochází to pole a nastavuje jen ty které jsou v poli vyjmenované. Takže musíš každou komponentu vyjmenovat.
Vlastní metodu si můžu připsat :) samozřejmě, jenomže David je většinou několik kroků napřed… Tak se radši ptám, abych zbytečně nevytvářel něco co už efektivněji funguje
- David Grudl
- Nette Core | 8218
enoice napsal(a):
Když mám formulář například na přidání nového uživatele, po odeslání se script vrátí na stejnou stránku, ale automaticky se tam vyplní předešlé údaje, hodilo by se, aby tam byly zase prázdná políčka.
Nyní to funguje tak, že automatické vyplnění formuláře v případě
odeslání „způsobí“ metoda $form->isSubmitted()
. Stačí
tedy tuto metodu nevolat. Nebo předtím prohlásit natvrdo formulář za
NEodeslaný: $form->setSubmittedBy(NULL)
.