PHP

Validování dat přes Doctrine

18. Února 2010

V dnešním díle seriálu o Doctrine ORM si ukážeme další skvělou vlastnost tohoto frameworku a tou je Validace. Validace dat může probíhat na několika úrovních od nejnižší vrstvy (databáze) až po tu nejvyšší vrstvu (javascript). Jistě mi dáte za pravdu, že ani jeden z těchto extrémů není nejlepší, ale samozřejmě taky mají svoje využití. Pokud používámě nějakou knihovnu na tvorbu formulářů většinou v ní můžeme validátory nastavit, ale my si dnes ukážeme, že nám k tomu stačí pouze Doctrine.


Validátory jsou nedílnou součástí programování webových aplikací. Doctrine k nim přistupuje opět velice elegantně, ostatně jako ke všemu. Nejdříve si popíšeme základní validátory a poté, jak je implementovat. Vypíšeme si opět jen ty nejdůležitější a nejzajímavější.

notnull - kontroluje zda hodnota není typu null.

notblank - kontroluje zda zadaná hodnota není prázdná.

minlength - zadaná hodnota musí být větší než hodnota nastavená pro tento sloupec.

email - hodnota musí mít správný tvar emailové adresy.

regexp - hodnota musí odpovídat danému regulárnímu výrazu.

past - kontroluje, jestli se jedná o datum, které již bylo.

future - stejně jako past, ale kontroluje zda se jedná o datum, co teprve bude.

date - kontroluje jestli je hodnota ve formátu data, jaké jste nastavili.

unique - hodnota musí být unikátní v daném sloupci.

Toto jsou jen základní a "nejpoužitelnější" validátory. Celý seznam můžete nalézt v dokumentaci Doctrine.

 

YAML


Validátory se implementují velice jednoduše. Stačí při vytváření YAML schématu dát danému sloupci nějakou validační vlastnost.


Dotaznik:   
    columns:
        pohlavi:
            type: string(20)
            regexp: "/(muž|žena)/"
        vek:
            type: integer(5)
            notblank: true
            range: [1,120]
        email:
            type: integer(5)
            notblank: true
            email: true
        datum:
            type: string(20)
            date: "Y M d" #hodnoty pouzity v php funkci date
           


Kód


Ve vašem PHP kódu už jen stačí nastavit validování. Otevřte soubor kde máte doctrine manager a přidejte následující řádky.

  1.  
  2. $manager = Doctrine_Manager::getInstance();
  3. $manager->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL);
  4.  

Samotná validace funguje velice jednoduše. Stači vytvořit objekt, který validujete a naplnění hodnot zavolat metodu, která zjistí validitu. V případě zájmu můžete nechat vypsat chybové hlášky.

  1. $dotaznik = New Dotaznik();
  2. $dotaznik->fromArray($someArray);
  3.  
  4. if(!$dotaznik->isValid()) {
  5.  
  6. // dostaneme errory ulozene v poli [sloupec] => pole erroru
  7. $userErrors = $dotaznik->getErrorStack();

Pokud chceme například vlastní chybové hlášky můžeme si je nadefinovat.

  1. foreach ($userErrors as $key => $val) {
  2. $errorKeys[] = $key ;
  3. if($key == "pohlavi") $errorMsg[] = "Pohlaví musí být muž nebo žena";
  4. if($key == "vek") $errorMsg[] = "Věk musí být číslo od 1 do 120";
  5. if($key == "datum") $errorMsg[] = "Nesprávný formát data";
  6. if($key == "email") $errorMsg[] = "Nesprávný formát emailové adresy";
  7. }

Používání Doctrine Validátorů je velice snadné a jeho výhodou je konzistence s celým frameworkem. Pokud pracujete s Doctrine ORM a potřebujete validovat data, tak je zbytečné "šahat" po jiném nástroji. Pokud vás validátory zajímají více do hloubky doporučuji si přečíst oficiální API této sekce přímo na stránkách frameworku.

Ohodnoť článek
Ohodnoťte článek.
zend

Přidat příspěvěk

captcha
zend

Diskuze

Copyright © 2011 Dominik Veselý & CodingWalrus | Designed by Tryst

Kategorie

Hledat