Missing setRequired(TRUE | FALSE) on field abc in form

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8111
+
+18
-

Děcka, u všech formulářových prvků, které mají validační pravidla, je potřeba explicitně určit, jestli jsou povinné, nebo ne.

Buď postaru:

// povinný
$form->addText('name')
	->setRequired()
	->addRule(...)
	->addRule(...);

// nepovinný
$form->addText('name')
	->addCondition($form::FILLED)
		->addRule(...)
		->addRule(...);

nebo nepovinný ponovu od 2.4:

// nepovinný
$form->addText('name')
	->setRequired(FALSE)
	->addRule(...)
	->addRule(...);

Tohle byste beztak všichni měli mít nastavené, protože jinak to není úplně dobře. Uživateli by mělo být u každého prvku jasné, zda je povinný a tudíž ho musí vyplnit, a to dřív, než mu vynadá validace.

Nette 2.4 vás upozorní, pokud označení povinnosti/nepovinnosti chybí, a to chybovou hláškou „Missing setRequired(TRUE | FALSE) on field abc in form“. Tak to prosím doplňte a nezakládejte kvůli tomu na GitHubu isssues. Je to záměr.

Od verze 3.0, protože tou dobou budeme mít všechny prvky jednoznačně označené, se stane režim „nepovinný“ výchozím (ne, teď to tak není, má-li prvek nějaká validační pravidla; vyzkoušejte si to), takže všechny setRequired(FALSE) bude v budoucnu možné odstranit. Vlastně můžete toho dosáhnout již teď, pokud třeba zakládáte nový projekt, nebo pokud jste u všech formulářů fakt poctivě doplnili chybějící setRequired(). A to tak, že v boostrap.php zavoláte:

Nette\Forms\Controls\BaseControl::enableAutoOptionalMode(); // zapni budoucnost 3.0

Filtry addFilter() jsou speciální formou validačního pravidla, takže pro ně to platí taktéž.