Validácia vstupných dát v CakePHP - 3. časť
V poslednej časti nášho miniseriálu o validácii dát v CakePHP si vytvoríme ukážkový príklad a názorne demonštrujeme celý mechanizmus validácie dát v tomto frameworku.
Ešte pred tým, než sa pustíme do nášho príkladu treba poznamenať, že pre správne pochopenie nasledujúcich častí je žiadúce prečítať si predchádzajúce 2 časti tohto seriálu (1. časť a 2. časť)
Ak ste sa už s predchádzajúcimi časťami podrobne zoznámili, poďme prejsť na našu ukážkovú aplikáciu. Naša aplikácia bude slúžiť na registráciu užívateľov a bude obsahovať jednoduchý formulár na zadanie základných informácii o užívateľovi.
Model
Model je najdôležitejšia časť našej aplikácie a preto sa jej budeme venovať ako prvej. Práve v modely budeme definovať validačné kritéria. V databáze si musíme najprv vytvoriť tabuľku, ktorú pomenujeme users a jej štruktúra je nasledovná
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 320 ) NOT NULL ,
`password` VARCHAR( 100 ) NOT NULL ,
`birthdate` DATE NOT NULL ,
PRIMARY KEY ( `id` )
)
Ako môžeme vidieť na kóde vyššie, pri registrácii bude užívateľ zadávať svoje meno, email adresu, heslo a dátum narodenia. Po vytvorení tabuľky v databáze si vytvoríme model, ktorý pomenujeme User a umiestníme ho do súboru app/models/user.php
class User extends AppModel {
var $name = 'User';
var $useTable = 'users';
var $validate = array(
'name' => array(
'alphanumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Povolené sú len čísla alebo písmená'
),
'between' => array(
'rule' => array('between', 5, 50),
'message' => 'Min. 5 max 50 znakov'
)
),
'email' => array('email',true),
'password' => array (
'between' => array(
'rule' => array('between', 5, 20),
'message' => 'Min. 3 max 20 znakov'
)
),
'birthdate' => array('date')
);
}
Na kóde vyššie môžeme vidieť jednotlivé validačné kritéria. Poďme si ich teda priblížiť. Pravidlo pre input name určuje, že v danom vstupe sa môžu nachádzať len čísla alebo písmená (‚rule‘ ⇒ ‚alphaNumeric‘) a že daný vstup musí byť minimálne 5 znakov a maximálne 50 znakov dlhý (‚rule‘ ⇒ array(‚between‘, 5, 50)). Pravidlo pre input email určuje, že daný vstup musí obsahovať správnu email adresu a navyše sme druhým voliteľným parametrom určili, že sa má validovať aj doménová časť email adresy. Pravidlo pre input password je nám už známe, a určuje minimálny a maximálny počet znakov v danom inpute. Posledné pravidlo pre input birthdate nám určuje, že daný vstup prijíma iba dátum v prednastavenom formáte.
Ďalším krokom je vytvorenie controlleru, ktorý spracuje udalosti spojené s odoslaním formulára. O celom mechanizme fungovania MVC v CakePHP sa dočítate v článku MVC model view controller v CakePHP. Controller pomenujeme UsersController a uložíme ho do súboru app/controllers/users_controller.php
class UsersController extends AppController {
var $name = 'Users';
var $helpers = array('Html', 'Form');
function add() {
if (!empty($this->data)) {
$this->User->create();
if ($this->User->save($this->data)) {
$this->Session->setFlash(__('Užívateľ úspešne uložený.', true));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash(__('Užívateľ nemohol byť uložený. Pokúste sa ešte raz.', true));
}
}
}
}
Kód vyššie vysvetľovať nemusím a každý by mu mal rozumieť. Metóda add() sa postará o uloženie dát do databáze. Dáta sa pred uložením budú automaticky validovať, takže sa nemusíme o nič starať a explicitne volať metódy pre validáciu tzn. že predtým, než sa dáta uložia do databázy, budú automaticky skontrolované podľa validačných pravidiel, ktoré sme definovali v modely. V prípade, že validácia vráti nejakú chybu, dáta sa neuložia a zobrazí sa chybová hláška. Ostáva nám teda priblížiť poslednú časť a tou je view, v ktorej okrem iného budeme zobrazovať aj spomínané chybové hlášky.
Kód s naším formulárom bude umiestnený v súbore app/views/users/add.ctp
<div class="users form">
<?php echo $form->create('User');?>
<fieldset>
<legend><?php __('Pridanie užívateľa');?></legend>
<?php
echo $form->input('name');
echo $form->input('email');
echo $form->input('password');
echo $form->input('birthdate');
?>
</fieldset>
<?php echo $form->end('Submit');?>
</div>
Vyššie uvedený kód je kompletný. Určite sa teraz pýtate, prečo sa v danom kóde nikde nenachádzajú časti pre zobrazenie chybových hlášok. CakePHP to robí za nás a automaticky zobrazuje správy pri každom inpute podľa toho, ako sme ich definovali v modely. Ak sme žiadnu chybovú správu pre daný input nedefinovali, ale validačné pravidlo áno, CakePHP zobrazí vlastnú prednastavenú chybovú hlášku. Niekedy budeme chcieť zobraziť chybové hlášky na inom mieste ako priamo pod inputom a mať tak zobrazovanie chybových správ pod vlastnou kontrolou. Riešenie by vyzeralo nasledovne
<div class="users form">
<div class="error"><? echo $form->error('User.name'); ?></div>
<?php echo $form->create('User');?>
<fieldset>
<legend><?php __('Pridanie užívateľa');?></legend>
<?php
echo $form->input('name',array('error'=>false));
echo $form->input('email');
echo $form->input('password');
echo $form->input('birthdate');
?>
</fieldset>
<?php echo $form->end('Submit');?>
</div>
Ako môžeme vidieť na kóde vyššie, najprv sme vypli zobrazovanie správ priamo pri inpute name ($form->input(‚name‘,array(‚error‘=>false))) a potom sme definovali miesto, kde sa má naša správa zobraziť a zavolaním metódy error() sme danú správu zobrazili.
Týmto je náš ukážkový príklad u konca. Vyššie uvedené kódy sú kompletné a jasne na nich môžeme vidieť princípy na ktorých je postavený CakePHP a to hlavne filozofia convention over configuration. Vďaka tejto filozofii je validácia dát veľmi jednoduchá a intuitívna, a jedinú vec ktorú musíme vykonať pre fungujúcu validáciu, je definovať validačné pravidlá v modely.
Súvisiace články
-
Kategórie
- Tipy a triky (28)
- Články (8)
- Fantom CMS (4)
- Zábava (2)
- Začíname s CakePHP (6)
-
Najčítanejšie články
-
Novinky
-
Seriál o CakePHP na www.debug.sk
15. 10. 2008
Od 7. októbra vychádza nový seriál o CakePHP na serveri zameranom na programovanie s názvom Debug.sk Autorom seriálu je autor tohto webu a kto by mal záujem, môžete daný seriál podporiť jeho prečítaním.
-
-
Nálepky
-
Nedávne komentáre
-
Rss kanály

Komentáre k článku
Nový komentár
Titulok: Odoslanie cez GET
Autor: Stevo
Vytvorený: 15. 05. 2008 11:27
Vdaka za clanok a super serial :)
Mam k nemu otazku az tak nesuvisiacu s validaciou… Ako pristupim k odoslanym datam, ak pouzijem formular odoslany metodou GET ?
V $this->data ich nenajdem, vraj by mali byt v $this->params[‚url‘] …, tam ale pri korektnom odoslani v tvare /nieco?var1=abc&var2=def najdem len premennu var2. Bug alebo ficura? :)
Titulok: RE: Odoslanie cez GET
Autor: Tibor
Vytvorený: 15. 05. 2008 15:09
No keby si to poriadne skusal, tak zistis, ze to co pises je pravda. Ked sa data odosielaju cez get, posielaju sa cez url, takze ich urcite najdes v $this->params[‚url‘]
Cize keby som formular z clanku odosielal formou get, po odoslani by mala url adresa napr. takyto tvar
Cize vsetky data z formulara sa nachadzaju v url a teda k nim pristupujes ako pole v $this->params['url] coho dokazom je aj vypis premennej $this->params po odoslani formulara
Titulok: povinny titulok
Autor: Stevo
Vytvorený: 15. 05. 2008 17:18
Chapem… Pouzivam cakephp 1.2, a problem je v tom ze
mi v $this->params vrati
Stratim prvy parameter [name] ⇒ name
Nikde neuvadzas o akej verzii cakephp pises, ja som tiez zabudol :) Pravdepodobne sme sa v nich nezhodli.
Titulok: RE: povinny titulok
Autor: Tibor
Vytvorený: 15. 05. 2008 18:06
Pouzivam verziu Beta: 1.2.0.6311. Cake urcite nevynechava ziadny argument posielany cez GET a to je jedno o aku verziu sa jedna, takze fakt netusim v com moze byt problem. Jedine zeby to bol nejaky bug v niektorej z verzii.