Validace formuláře a prvky, co nejsou vždy přítomny

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

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}&nbsp;</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
+
0
-

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

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