Validace formuláře a prvky, co nejsou vždy přítomny
- pavel_l
- Člen | 5
Zdravím,
u aplikace na které pracuji jsem narazil na následující problém po migraci na Nette 2. Viz část vykreslení formuláře:
{if $isRozdelany && $Dok->typ_dokumentu->smer == 0}
<dl class="detail_item">
<dt>{$metadataForm['zpusob_doruceni_id']->label}</dt>
<dd>{$metadataForm['zpusob_doruceni_id']->control}</dd>
</dl>
{elseif !empty($Dok->zpusob_doruceni)}
<dl class="detail_item">
<dt>Způsob doručení:</dt>
<dd>{$Dok->zpusob_doruceni} </dd>
</dl>
{/if}
Prvek „zpusob_doruceni_id“ je SelectBox. Ve verzi 2 byla přidána validace SelectBoxu. Nyní program při submitu formuláře hlásí „Please select a valid option.“
S čím si nevím rady je, že informaci, jestli formulář má obsahovat daný prvek, vím pouze při vykreslení formuláře, ne při submitu. Možné řešení mě napadá během sestavování formuláře získat ID dokumentu z POST dat (je přenášeno v hidden poli) a v ten moment načíst dokument a zjistit, zda se má určitý prvek do formuláře přidat, či ne.
- Oli
- Člen | 1215
Jak to že nevíš jaký prvek má formulář obsahovat? To měníš javascriptem?
{if $isRozdelany && $Dok->typ_dokumentu->smer == 0}
Tohle mě přijde jako tahaný z db, takže když to dáš do actionMetody, tak se to provede při odeslání formuláře a budeš to vědět zase. Nebo ne?
Možná to úplně nechápu…
- pavel_l
- Člen | 5
Díky. Tak to nakonec nebylo složité, ale nějak mi to v tom horku
nemyslí :)
V action metodě stačilo upravit
$dokument_id = $this->getParameter('id', null);
if ($dokument_id === null)
$dokument_id = $this->getHttpRequest()->getPost('id');
a potom přesunout podmínku ze šablony do createComponentMetadataForm().