Choď na navigáciu

Validácia vstupných dát v CakePHP - 1. časť

Validácia vstupných dát je jedna z najdôležitejších častí každej aplikácie. Pomocou validácie máme zaručené, že dáta vstupujúce do našej aplikácie odpovedajú nastaveným pravidlám a nebudú narušovať konzistenciu našej aplikácie. Vo verzii 1.2 CakePHP prichádza s prepracovanou validáciou a my si v tomto článku podrobne vysvetlíme všetky jej aspekty.

Ako motivačný príklad si predstavme situáciu, že užívateľ odosiela dáta z prihlasovacieho formulára. V danom formulári chceme určiť, že prihlasovacie meno bude minimálne 5 znakov dlhé a že heslo nebude prázdne. CakePHP takúto situáciu rieši veľmi elegantne a definovanie validačných pravidiel robí veľmi jednoduchým.

Prvým krokom k validácii dát je vytvorenie validačných pravidiel v modely. To docielime použitím poľa validate v našom modely. Kód by mohol vyzerať následovne

<?php
class User extends AppModel {
    var $name = 'User';
    var $validate = array(
        'login' => 'alphaNumeric'
    );
}
?>

Na ukážke vyššie môžeme vidieť definovanie pravidiel pre validáciu. Príklad definuje pravidlo pre input pomenovaný login a určuje, že z daného inputu bude prijímaný vstup v podobe písmen a číslic. Definovaním takýchto pravidiel umožňujeme CakePHP automaticky zobrazovať chybové hlášky pri daných vstupných poliach v prípade, že dané pole neobsahuje očakávaný vstup a tým uľahčuje programátorovi množstvo času. V našom konkrétnom prípade by odosielanie formulára skončilo chybovou hláškou vtedy, ak by sme do daného inputu vložili znak, ktorý by nebol buď písmeno alebo číslica, a snažili by sme sa takýto formulár odoslať.

CakePHP má množstvo prednastavených validačných pravidiel a ich použitie je veľmi jednoduché. Prednastavené pravidlá nám okrem iného umožňujú kontrolovať email adresu, url, dátum a iné často používané pravidlá (všetky pravidlá si detailne predstavíme v nasledujúcich častiach textu). Na ďalšom príklade môžeme vidieť komplexný príklad, ktorý nám demonštruje možnosti validácie v CakePHP. Príklad je prevzatý z Cookbook: Data Validation

<?php
class User extends AppModel {
    var $name = 'User';
    var $validate = array(
        'login' => array(
            'alphanumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Alphabets and numbers only'
                ),
            'between' => array(
                'rule' => array('between', 5, 15),
            'message' => 'Between 5 to 15 characters'
            )
        ),
        'password' => array(
            'rule' => array('minLength', '8'),
            'message' => 'Mimimum 8 characters long'
        ),
        'email' => 'email',
        'born' => array(
            'rule' => 'date',
            'message' => 'Enter a valid date',
            'allowEmpty' => true
        )
    );
}
?>

Príklad vyššie nám ukazuje, ako priradiť niekoľko pravidiel jednému inputu. Môžeme vidieť, že input login má definované dve pravidlá. Prvé nám hovorí, že daný vstup môže obsahovať len písmená a číslice, druhé pravidlo určuje, že login môže mať dĺžku od 5 do 15 znakov. Taktiež môžeme na príklade pozorovať, ako k jednotlivým inputom zobraziť chybové správy v prípade, ak je validácia neúspešná a daný vstup nevyhovuje určeným pravidlám. Ak však vstavané validačné pravidlá nevyhovujú vašim predstavám, samozrejme si môžete vytvoriť vlastné podľa svojich predstáv.

Teraz už máme veľmi dobrú a ucelenú predstavu o validácii v CakePHP a o jej možnostiach. Keďže máme niekoľko možností, ako definovať jednotlivé pravidlá pre daný vstup, poďme si ich bližšie predstaviť.

Základné pravidlo

Ako názov napovedá, jedná sa o základný a najjednoduchší spôsob definovania validačných pravidiel. Syntax je nasledovná

var $validate = array('fieldName' => 'rule');

Ako môžeme vidieť, validačné pole obsahuje dvojicu, a to fieldName, čo je názov input prvku v našom formulári a rule, čo môže byť napríklad vstavané pravidlo alebo regulárny výraz.

Jedno pravidlo pre input

Tento spôsob je rozšírením základného pravidla a poskytuje nám širšie možnosti pri validovaní vstupu. Príklad je opäť prevzatý z Cookbook: Data Validation

var $validate = array(
    'fieldName1' => array(
        'rule' => 'ruleName', // or: array('ruleName', 'param1', 'param2' ...)
        'required' => true,
        'allowEmpty' => false,
        'on' => 'create', // or: 'update'
        'message' => 'Your Error Message'
    )
);

Ako môžeme vidieť, jednému inputu je priradené pole s piatimi kľúčmi. V ukážke je zobrazený len jeden input, samozrejme ich môžeme definovať ľubovoľne a každý z nich môže obsahovať pole s kľúčmi s vlastnými hodnotami. Poďme si teda priblížiť, čo dané kľúče znamenajú

rule

Tento kľúč definuje validačné pravidlo pre daný input. Tento kľúč nie je omedzený len na použitie jedného pravidla, ale môže taktiež obsahovať pole so vstavanými validačnými pravidlami, názov metódy v modely, názov metódy zo základnej triedy Validation alebo vlastný regulárny výraz.

required

Tomuto kľúču by mala byť priradená boolean hodnota. Tento kľúč nám určuje, či sa má vo formulári nachádzať daný input alebo nie. Ak teda nastavíme hodnotu na true, to znamená, že daný formulár pri odoslaní musí tento input prvok obsahovať, či už prázdny alebo nie. Pozor však, tento kľúč nám neurčuje, či musí daný input obsahovať dáta alebo nie, hovorí nám len, že daný prvok vo formulári musí byť.

allowEmpty

Tomuto kľúču by mala byť priradená boolean hodnota. Tento kľúč nám určuje, či daný input musí obsahovať dáta alebo nie. Ak teda hodnotu tohto kľúča nastavíme na true, to znamená, že daný input nesmie byť odoslaný ako prázdny a musí obsahovať dáta.

on

Tento kľúč nám umožňuje určiť, pri akých akciách sa má daná validácia vykonávať. V našom príklade sme určili, že daná validácia sa bude vykonávať pri akcii create a pri akcii update bude validácia neaktívna. Ak je dané kľúč nastavený na null, validácia sa bude vykonávať pri oboch akciách.

message

Tento kľúč nám umožňuje určiť vlastnú chybovú hlášku pre daný input.

Viac pravidiel pre input

Tento spôsob sme si už naznačili v časti, kde sme si predstavovali validáciu v CakePHP. Poďme sa pozrieť na nasledujúci príklad

var $validate = array(
    'login' => array(
       'alphanumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => true,
            'message' => 'Alphabets and numbers only'
             ),
        'between' => array(
            'rule' => array('between', 5, 15),
            'message' => 'Between 5 to 15 characters'
        )
    )
)

Môžeme vidieť, že vstupné pole login má definované dve pravidlá, prvé nám hovorí, že daný vstup môže obsahovať len písmená a číslice, druhé pravidlo určuje, že login môže mať dĺžku od 5 do 15 znakov. V daných pravidlách môžeme využiť taktiež kľúče, ktoré sme si predstavili v časti Jedno pravidlo pre input.

Týmto je náš článok u konca. V ďalšej časti sa detailne pozrieme na vstavané validačné pravidlá, ktoré nám ponúka CakePHP a ukážeme si ucelený príklad, ako celý mechanizmus validácie funguje.

Povedz o článku aj ostatným - www.pridej.cz

Hodnotenie článku: 38%
Počet hodnotení: 60

zlýdobrý

Komentáre k článku

Nový komentár

  1. Titulok: alphaNumeric
    Autor: m@te
    Vytvorený: 28. 04. 2008 11:40

    Pozor ale na to, ze ‚alphaNumeric‘ nefunguje s diakritikou. Cize ak uzivatel zada do inputu ščľš a pod. vrati mu to chybu.