Jak donutit formulář aby se nevyplňoval

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ViliamKopecky
Nette hipster | 230
+
0
-

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í…

LM
Člen | 206
+
0
-

Proč to nepřesměruješ po úspěšném vytvoření toho uživatele?

Panda
Člen | 569
+
0
-
	$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
+
0
-

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
+
0
-

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).