Autor Zpráva
Dan Charousek
Profil
Hezké sobotní odpoledne.

Uplynul skoro rok (toto letí), co jsem zde na diskusi představil Vall-Iho.

Za tu dobu jsem ho několikrát použil na různých projektech. Jak čas šel, tak se ukázalo, v čem Vall-I pokulhává (co bylo třeba opravit / změnit), tak i v čem tkví jeho přednosti.

Dnes bych vám rád ukázal, jak Vall-I vyrostl, trochu dospěl a co vše s formuláři vlastně umí :).

Věřím, že Vall-I najde uplatnění napříč celým spektrem vývojářů, kteří pracují na projektech, které nejsou stavěny na frameworcích a systémech, které mají vlastní formulářové knihovny.

Jak tedy začít?

login-page.php:
<?php

# nejdůležitější je asi část, kde Vall-Iho načteme:
require_once "cesta/k/vall-imu/Vall-I.php";

use Pefrewo\Libraries\VallI;

# vall-i podporuje statickou inicializaci a od té doby, co tato fičura existuje nepoužívám nic jiného :)
$form = VallI::create([
    # cesta k formuláři. např.:
    'filePath' => 'login-form.php',
    
    # aby měl Vall-I přehled o tom, se kterými daty by měl pracovat je nutné data, která spadají do validace pro konkrétní formulář rozlišovat do pole (viz. soubor formuláře)
    'dataKey' => 'udaje',
    
    # proměnné předávané do šablony formuláře
    'params' => ['textTlacitka' => 'Odeslat'],
    
    # třídy předávané (ne)validním inputům
    'classes' => ['invalid' => 'InvalidElement', 'valid' => 'ValidElement'],
    
    # výchozí hodnoty. Např.:
    'defaults' => ['name' => 'John Doe'],
    
    # not to restore inputy. Elementy, kterým se neobnoví hodnota při nevalidním odeslání formuláře.
    'notToRestore' => ['password'],
    
    # a konečně on submit funkce
    'onSubmit' => function($form, $isValid) {
        // $form->getData() vrátí odeslaná data
        if($isValid) {
            echo 'Formulář je validní';
        } else {
            // $form->getErrorMessages() vrátí všechny chybové hlášky.
            echo 'Formulář není validní'
        }
    }    
]);

# formulář se vykreslí snadno:
echo $form;

login-form.php:

<form method="POST" id="loginForm">

    Username:
    <input type="text" name="udaje[username]" data-name="username" class="VallIElement">
    <rules name="username">
        <rule name="required" content="true" message="Please enter your username.">
    </rules>
    
    Password:
    <input type="password" name="udaje[password] data-name="password" class="VallIElement">
    <rules name="password">
        <rule name="required" content="true" message="Please enter your password">
        <rule name="minlength" content="6" message="Please enter password longer than 6 characters.">
    <rules>
    
    <button type="submit><?= $textTlacitka ?></button>

</form>

Každý element, který podléhá validaci má třídu VallIElement
Každý element musí mít data-name atribut, který specifikuje jeho jméno v rámci Vall-Iho - hledá se $_POST['dataKey']['data-name'], kde dataKey je klíč specifikovaný při inicializaci formuláře.

Pokud z nějakého důvodu potřebujete data více větvit, jméno elementu podléhá této specifikaci:

<input type="text" name="data[user][name]" class="VallIElement" data-name="user-name">
<input type="password" name="data[user][password]" class="VallIElement" data-name="user-password">

Zatím nemám úplně ucelenou dokumentaci na githubu, takže seznam validačních pravidel je k nahlédnutí na konci článku, ve kterém o VallIm píšu na svém blogu.

Pokud vám z nějakého důvodu pravidla, která jsou k dispozici nestačí, existuje samozřejmě možnost přidání vlastního pravidla.

<?php

$form->addRule('username', [
    'own' => function($value) {
        return $value % 2 == 0; // konroluje, zda je číslo sudé
    }
], [
  'Please enter an even number.'
]);

K dispozici je i inline výpis chybových hlášek, který je defaultně zapnut a dá se vypnout při inicializaci pomocí
useInlineErrorMessages => false

Doufám, že Vall-I někomu ulehčí život a práci při validování formulářů :).

Jsem otevřený všem nápadům, kritice, poznámkám.

Přeji hezký den,

Dan
CZechBoY
Profil
Asi by bylo lepší udělat to více objektově.
Proč bych měl použít tvoji knihovnu a ne třeba Nette/Forms?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: