Vlastní javascriptová validace

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

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

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

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

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 treba MyNamespaceFooOrderRules__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 :-)