Jde se bránit proti změně hodnoty v hidden? Obecně kontrola dat z formů

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

Ahoj,
prosím o objasnění. Mám ve formuláři

$form->addHidden('position_id', $this->positionId);

Jde se nějak bránit proti změně této value? Když si edituju stránku, přepíšu hodnotu a odešlu.

Obecně mě zajímá, jestli musím ověřovat odesílaná data formulářů? Mám nějak zaryto v paměti, že nette kontroluje data i po odeslání. Je to tak?

EDIT:
Přidal jsem k addHidden()

	->addRule(Form::EQUAL, NULL, $this->positionId);

a zkoušel změnit hodnotu a opravdu se kontrola provedla.

Takže trochu pozměním otázku: Pokud správně nastavím validační pravidla, tak nette je za mě ohlídá i při zpracování formuláře?

Editoval thm (3. 3. 2015 9:41)

jiri.pudil
Nette Blogger | 1032
+
+1
-

HiddenField umožňuje nastavit perzistentní hodnotu, která se nepřepíše odeslanými údaji, ale nedá se nastavit přes addHidden, jedině ruční instanciací:

$form['position_id'] = new Nette\Forms\Controls\HiddenField($this->positionId);
greeny
Člen | 405
+
+1
-

Nette je sice chytré a kontrolu udělá za tebe, ale ne tu, kterou potřebuješ nejvíc (např., že idčko editovaného článku, které si posíláš v hidden, patří k článku, který může aktuálně přihlášený uživatel editovat). Tyhle věci si musíš kontrolovat sám i po odeslání formu.

Nette zkontroluje client-side (javascript) i server-side (php) data ve formuláři, jestli odpovídají validačním pravidlům, víc ne.

Mysteria
Člen | 797
+
+1
-

Osobně pro takové validace, používám následující konstrukci:

$form->addHidden('id', $this->id)->addRule(function($input) {
	return $this->facade->isUserPhotoAllowed(['id' => $input->value, 'user_id' => $this->user->id]);
}, 'Litujeme, ale k úpravě této fotografie nemáte přístup.');
thm
Člen | 147
+
0
-

@jiri.pudil Díky za tuto informaci, o tomto jsem vůbec nevěděl a jsem rád, že jsem zase chytřejší. Toto se mi přesně hodí do FormFactory.
@greeny Ano toho jsem si vědom. Šlo mi opravdu jenom o to, že když nastavím ve formuláři mantinely, tak jestli mi nette ohlídá, že po odeslání ty hodnoty v těchto mantinelech opravdu budou. Cože se tak děje. Díky za potvrzení mé otázky.
@Mysteria Díky, toto si určitě vyzkouším.

Díky vám všem za objasnění!