addRule(), chybová hláška
- pseudo
- Člen | 13
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
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
Š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…