Jde se bránit proti změně hodnoty v hidden? Obecně kontrola dat z formů
- thm
- Člen | 147
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
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
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
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
@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í!