Vlastní validační pravidlo pro validaci vkládané IPv4 adresy

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

Potřebuji vytvořit validační pravidlo formuláře, které bude validovat správný tvar vkládané IPv4 adresy.
Zkouším to tímto způsobem a hází mi to chyby, že nezná mnou vytvořený validátor. Jsem na správné cestě, nebo zle validaci provést úplně jinak. Postupoval jsem podle návodu.

Ještě jsem zkoušel validovat pomocí regulárních výrazů, ale tomu bych se raději vyhnul, protože co jsem tak hledal, nenašel jsem nikdy úplně 100% výraz, který by fungoval.

public function createComponentDatabaseConnection()
{
    $form = new Nette\Application\UI\Form;

    function ipAdressValidator($item)
    {
        return filter_var($item->value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
    }

    $form->addText('server', 'Server (IPv4 adresa):')
        ->addRule('ipAdressValidator', 'Zadejte adresu ve správném formátu IPv4');

    $form->addSubmit('connect', 'Připojit se');

    $form->onSuccess[] = $this->databaseConnectionFormSucceeded;
    return $form;
}

Dík za radu.

Editoval James (3. 12. 2013 16:51)

Majkl578
Moderator | 1364
+
0
-

Nemůžeš takhle deklarovat pojmenovanou funkci, protože zvenčí nebude vidět. Použij ideálně anonymní funkci:

use Nette\Application\UI\Form;
use Nette\Forms\Control\TextBase;

public function createComponentDatabaseConnection()
{
    $form = new Form();

    $form->addText('server', 'Server (IPv4 adresa):')
        ->addRule(function (TextBase $item) {
            return filter_var($item->getValue(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
        }, 'Zadejte adresu ve správném formátu IPv4');

    $form->addSubmit('connect', 'Připojit se');

    $form->onSuccess[] = $this->databaseConnectionFormSucceeded;
    return $form;
}
James
Člen | 54
+
0
-

Je potřeba ještě nějak upravit netteForms.js aby fungovala i validace prostřednictvím javascriptu, protože teď zřejmě asi validace proběhne, protože při vložení nevalidních dat se formulář neodešle, ale také se nezobrazí žádná hláška.

Majkl578
Moderator | 1364
+
0
-

Client-side validace pro user-defined callbacky není nativně podporovaná (vyžadovalo by ajax).