addRule(), chybová hláška

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

Zdravím, jsem tu opět s poměrně trapným dotazem.
Ačkoliv jsem Formuláři v nette velmi nadšen, jedna drobnost mi stále uniká…

<?php
        $form->addText('title', 'Titulek obrázku',20)
            ->addRule(Form::FILLED, 'Zadejte prosím titulek obrázku');

        $form->addFile('photo', 'Fotka')
            ->addRule(Form::MIME_TYPE, 'Fotografie musí být ve formátu JPG nebo JPEG', 'image/jpeg')
?>

V prvním případě dojde u klienta k chybovému hlášení přes alert()
V druhém se pak chybová hláška vypíše jako položka seznamu do stránky.

Dá se v druhém případě nějak nastavit css třída?

BigCharlie
Člen | 283
+
0
-

Pokud to dobře chápu, tak nejprve ten rozdíl – v druhém případě to není alert proto, že je nejprve nutné na serveru zjistit, o jaký MIME typ jde – formulář se tedy musí odeslat. To je asi ale jasné.

K nastavení CSS třídy pro druhý případ: formuláře obvykle vykresluje ConventionalRenderer, který získáš přes $form->getRenderer().

Standardně je nastaven tak, že se chyby vykreslují jako seznam s třídou error (tedy pro css ul.error). Můžeš si to snadno upravit přes wraper na cokoliv:

$renderer = $form->getRenderer();
//třeba takhle
$renderer->wrappers['error']['container'] = 'div class=error';
$renderer->wrappers['error']['item'] = 'p';

Případně si přes Debug::dump($renderer->wrappers) vypiš všechno, co můžeš upravit a změnit a změň to.

Editoval BigCharlie (18. 6. 2010 11:38)

pseudo
Člen | 13
+
0
-

díky, přesně tohle jsem potřeboval :-)… jdu si to zkusit

pseudo
Člen | 13
+
0
-

Šoupnu sem ještě jeden dotaz

Mám komponentu formuláře pro přidání / editaci záznamu z galerie (editace, přidání se rozlišuje pode naplnění / nenaplnění hidden pole ID). Jediný problém mám s polem pro upload souborů.

Potřebuji totiž aby: Pokud není žádná hodnota v hidden inputu ID, uživatel musí vybrat soubor. Pokud tam hodnota je a pouze editujeme, soubor se vybrat nemusí. Pokud už ovšem soubor uživatel vybere, musí splňovat pravidlo na MIME_TYPE a velikost.

MIME_TYPE, MAX_FILE_SIZE, FILLED všechno mi funguje, problém mám s podmínkou závislosti na onom hidden inputu

<?php
$form->addFile('photo', 'Fotka')
            ->addConditionOn($form['id'], Form::NUMERIC, FALSE)
                ->addRule(Form::FILLED, 'Vyberte fotografii, kterou chcete nahrát.')
            ->addCondition(Form::FILLED)
                ->addRule(Form::MIME_TYPE, 'Fotografie musí být ve formátu JPG nebo JPEG', 'image/jpeg')
                ->addRule(Form::MAX_FILE_SIZE, 'Fotografie nesmí být větší než 2 MB',2097152);
?>

mi hází Call to undefined static method Nette\Forms\HiddenField::validateinteger().
Co jsem koukal na foru měl tu někdo podobný problém, ovšem tam se to jaksi (ne)vyřešilo. Dotyčný potřeboval pouze zjistit zda je nebo není id v hidden inputu uloženo, což nakonec pořešil až při zpracování formuláře…

pseudo
Člen | 13
+
0
-

hnn, tak ať bádám jak bádám, stále se mi nedaří odhalit chybu…

David Grudl
Nette Core | 8074
+
0
-

Form::NUMERIC nejde dát na hidden field, použij Form::FILLED