Vlastní javascriptová validace
- Томас
- Člen | 85
Dobrý den, snažím se ověřit input ve formuláří pomocí vlastní validace podle dokumentace atd.
Vytvořil jsem si vlastní třídu:
class OrderRules
{
CONST IC : "validateIC";
public static function validateIC(\Nette\Forms\IControl $c)
{
// ...
return false;
}
}
Ve formuláří to používám takto:
$this->addText("ic")
->addRule(OrderRules::IC, "špatný formát :p");
A vyhodí mi to vyjímku : „Unknown validator ‚validateIC‘ for control ‚ic‘.“
Pokud ale funkci přesunu do místa, kde se nachází formulář a hodím ho tam pomocí callbacku
$this->addText("ic")
->addRule(callback($this, "validateIC"), "špatný formát :p");
tak to funguje, ale nefunguje validace pomocí javascriptu :
<script>
Nette.validators.validateIC = function (elem, arg, value) {
return false;
};
</script>
forms.js od nette nalinkovaný mám, verzi nette mám 2.3.0, ostatní validace javascriptem mi funguje, jen to moje ne. Dokázal by mi někdo pomoct? Vysvětlit? Předem díky :-)
BTW: základní validace formulářů mi nestačí (nebo nevím o způsobu jak zkontrolovat ičko jen pomocí základních pravidel)
- David Matějka
- Moderator | 6445
v te js validaci musi by uveden i nazev tridy, myslim, ze takhle:
Nette.validators.OrderRules__validateIC = function (elem, arg, value) {
return false;
};
pokud by to bylo v NS, tak se to myslim zapisuje bez \
, takze
treba MyNamespaceFooOrderRules__validaceIC
- Томас
- Člen | 85
Zdravím, dostal jsem se do fáze, kdy mi to funguje, ale musel jsem se hrabat přímo v Nette.
// muj form
$this->addText("ic")
->addRule(":Ic", 'Špatný formát IČ!');
// Nette/Forms/Validator
public static function validateIc(\Nette\Forms\IControl $control)
{
// ...
return false;
}
// forms.js
Nette.validators = {
Ico: function (elem, arg, value) {
return false;
},
// ...
To ale nechci a nedaří se mi udělat vlastní validátor. Ať dělám co dělám, pořád mi to hází unknown validator.
Editoval Томас (1. 6. 2015 14:29)
- Томас
- Člen | 85
David Matějka napsal(a):
v te js validaci musi by uveden i nazev tridy, myslim, ze takhle:
Nette.validators.OrderRules__validateIC = function (elem, arg, value) { return false; };
pokud by to bylo v NS, tak se to myslim zapisuje bez
\
, takze trebaMyNamespaceFooOrderRules__validaceIC
Už to funguje, bylo to tím NS. + chyběl mi ve validatoru Nette\Object (to jsem zjistil jen náhodou, že tam musí být, když jsem projížděl nette validator, bez NObjectu mi to nefunguje)
// form
$this->addText("ic")
->addRule("Moje\Top\Namespace\Eu\OrderRules::validateIc", 'Špatný formát IČ!');
// validator
namespace
Moje\Top\Namespace\Eu;
use Nette\Object;
class OrderRules extends Object
{
public static function validateIc(\Nette\Forms\IControl $control)
{
return false;
}
}
// a js
<script>
Nette.validators.MojeTopNamespaceEuOrderRules_validateIc = function (elem, arg, value) {
return false;
};
</script>
Díky za pomoc :-)