Hướng dẫn học: Data validation toàn tập với CakePHP

Hướng dẫn học: Data validation toàn tập với CakePHP

  • Cách làm việc với Data validation
  • Cài đặt Cakephp và viết ứng dụng datavalidation
  • Sử dụng 1 tập luật cho 1 field
  • Sử dụng nhiều tập luật cho 1 field
  • Sử dụng tập luật bằng regular expression
  • Sử dụng chức năng callback function
  • Source các ví dụ

Data Validation là một trong những thành phần không thể thiếu trong hầu hết các ứng dụng web. Nó giúp cho các dữ liệu được đảm bảo được kiểm tra chặt chẽ trước khi chèn vào CSDL.

Cũng như CodeIgniter, Zend ,CakePHP cũng có chức năng Data Validation .Bài viết sẽ hướng dẫn cho người dùng cách sử dụng tập luật và ứng dụng chúng trong các trường hợp cụ thể khác nhau với các hàm hổ trợ sẵn của CakePHP.

1.Cách làm việc của Datavalidation :

Để sử dụng Datavalidation thì trong ứng dụng của chúng ta cần có hai thành phần chính :
Thành phần form helper : sử dụng cho việc tạo form

var $helpers = array ('Html','Form'); 

Thành phần namespace validate : sử dụng các tập luật để validation dữ liệu

var $validate = array(tập_luật); 

Cụ thể trong ứng dụng này tôi có mô hình như sau :

Controller : Valids , với các function :
demo01 : sử dụng 1 tập luật cho 1 field
demo02 : sử dụng nhiều tập luật cho 1 field
demo03 : sử dụng tập luật bằng regular expression
demo04 : sử dụng chức năng callback function giống như các Framework khác như CodeIgniter,Zend….
demo05 : ví dụ tổng hợp từ các demo được liệt kê trên
Model : Valid , với các hàm cho từng function trong Controller tương ứng
valid_01 : sử dụng cho hàm demo01 trong Controller Valids
………..
valid_05 : sử dụng cho hàm demo05 trong Controller Valids
View :
demo01.ctp : file hiển thị form của hàm trong controller tương ứng (demo01)
………
Demo05.ctp : file hiển thị form của hàm trong controller tương ứng (demo05)

2.Cài đặt Cakephp và viết ứng dụng datavalidation :

2.1.Cài đặt CakePHP :

xem cách cài đặt cakePHP

Các thư mục cần chuẩn bị :

- app/controllers/valids_controller.php
- app/model/valid.php
- app/views/valids/
Chuẩn bị cho Controller Valids : (app/controllers/valids_controller.php)

<?php
class ValidsController extends AppController{
    var $name = "Valids";
    var $helpers = array ('Html','Form');
    var $components = array('Session'); // Use Flash messenger of Session component
?>

Chuẩn bị cho Controller Valids : (app/models/valid.php)

<?php
class valid extends  AppModel{  
    var $useTable = false; // không sử dụng table valid đồng nghĩa là không sử dụng database
    var $validate = array(); // name space mặc định khi sử dụng datavalidation
?>

Trong ví dụ này các ứng dụng không chèn dữ liệu vào database mà chỉ thông báo có hợp lệ hay không và báo lỗi tương ứng .
Nên trong Model tôi dùng namespace là

var $useTable = false; 

để ám chỉ là không sử dụng bảng CSDL

Sử dụng 1 tập luật cho 1 field

- Yêu cầu tạo 1 form nhập liệu với 2 field với các tập luật được mô tả :
- title : không được phép rỗng
- info : không được phép rỗng
Trong Controller Valid ta thêm hàm demo01 :

<?php
class ValidsController extends AppController{
    var $name = "Valids";
    var $helpers = array ('Html','Form');
    var $components = array('Session'); // Use Flash messenger of Session component
 
// ---- Valid one rule
    function demo01(){
                $this->Valid->set($this->data);
                if($this->Valid->valid_01()==TRUE){
                    $this->Session->setFlash("Data is avaliable !");
                }else{
                    $this->Session->setFlash("Data is not avaliable !");
                } 
    }
?>

Ghi chú :

Chức năng validation sẽ được kích hoạt khi ta dùng hàm

$this->Valid->set($this->data); 

Sau đó Model Valid gọi hàm valid_01() để sử dụng tập luật cho các field tương ứng (title,info)

Trong thư mục app/views/valids/ tạo file demo01.ctp :

<h1>Add Post</h1>
<?php
echo $this->Form->create('Valid', array('action' => 'demo01'));
echo $this->Form->input('title');
echo $this->Form->input('info');
echo $this->Form->end('Register');
?>

Trong model Valid thêm hàm valid_01() :

<?php
class valid extends  AppModel{  
    var $useTable = false;
    var $validate = array();
    
    
    //------- Valid 01 :  one rule
    function valid_01(){
        $this->validate = array(
                                    "title" => array(
                                                            "rule" => "notEmpty",
                                                            "message" => "Please enter title !",
                                                        ),
                                    "info" => array(
                                                            "rule" => "notEmpty", // tập luật là không rỗng
                                                            "message" => "Please enter info !", // thông báo khi có lỗi
                                                        )
                                ); 
       if($this->validates($this->validate)) // nếu dữ liệu đã được validate (hợp lệ)
        return TRUE; 
       else 
        return FALSE;
    }
?>

Ghi chú :

 Để validate dữ liệu ta dùng namespace validate ($this->validate) để gán tập luật cho các field
 Với rule là từ khóa để chỉ đó là tập luật và notEmpty là từ khóa để nói là không được rỗng
Trong 1 số tài liệu người ta có thể dùng từ khóa VALID_NOT_EMPTY để thay cho từ khóa notEmpty message là từ khóa để chỉ thông báo lỗi

$this->validates($this->validate) //hàm kiểm tra các tập luật

Các từ được koi là từ khóa thì phải viết đúng tên và giữ nguyên nội dung của từ.

Chạy thử ứng dụng đầu tiên : http://localhost/cakephp/valids/demo01

Hướng dẫn học: Data validation toàn tập với CakePHP

 Một số tập luật thông dụng : 
	'rule' => 'alphaNumeric' :  chỉ có số hoặc chữ
	'rule' => array('between', 5, 15) : giá trị nằm trong khoản từ 5-15
	'rule' => array('comparison', '>=', 18) : giá trị phải lớn hơn 18
	'rule' => array('email', true) : định dạng email
	'rule' => array('extension', array('gif', 'jpeg', 'png', 'jpg')) : dành cho upload file , kiểm tra extension
	'rule' => array('minLength', 8) : độ dài nhỏ nhất là 8
	'rule' => array('maxLength', 8) : độ dài tối đa là 8
	'rule' => 'numeric' : dữ liệu nhập là số
	'rule' => 'notEmpty' : dữ liệu không được bỏ trống
	'rule' => 'url' : định dạng địa chỉ url

Sử dụng nhiều tập luật cho 1 field

- Yêu cầu tạo 1 form nhập liệu với 3 field với các tập luật được mô tả :
- username :
 không được phép rỗng
 Tối đa là 10 kí tự
 Ít nhất là 4 kí tự

- email :
 không được phép rỗng
 định dạng là email
- website
 không được phép rỗng
 định dạng là địa chỉ url

Trong Controller Valid ta thêm hàm demo02 :

<?php
class ValidsController extends AppController{
    var $name = "Valids";
    var $helpers = array ('Html','Form');
    var $components = array('Session'); // Use Flash messenger of Session component
 
// ---- Valid multi rules
    function demo02(){
                $this->Valid->set($this->data);
                if($this->Valid->valid_02()==TRUE){
                    $this->Session->setFlash("Data is avaliable !");
                }else{
                    $this->Session->setFlash("Data is not avaliable !");
                } 
    }
?>

Trong thư mục app/views/valids/ tạo file demo02.ctp :

<h1>Add Post</h1>
<?php
echo $this->Form->create('Valid', array('action' => 'demo02'));
echo $this->Form->input('username');
echo $this->Form->input('email');
echo $this->Form->input('website');
echo $this->Form->end('Register');
?>

Trong model Valid thêm hàm valid_02() :

<?php
class valid extends  AppModel{  
    var $useTable = false;
    var $validate = array();  
  //-------- Valid : Multi rule
    function valid_02(){
        $this->validate = array(
                                "username"=>array(
                                                    "rule1" => array(
                                                                    "rule" => "notEmpty",
                                                                    "message" => "Username can not empty",
                                                                    ),
                                                    "rule2" => array(
                                                                    "rule" => array('minLength', 4),
                                                                    "message" => "Usernames must be at least 4 characters long",
                                                                    ),
                                                    "rule3" => array(
                                                                    "rule" => array('maxLength', 10),
                                                                    "message" => "Usernames must be no larger than 10 characters long",
                                                                    ),
                                                ),
                                "email" => array(
                                                    "rule1" => array(
                                                                        "rule" => "notEmpty",
                                                                        "message" => "Please enter email !",
                                                                    ),
                                                    "rule2" => array(
                                                                        "rule" => "email",
                                                                        "message" => "Email not avaliable !",
                                                                    ),
                                                ),
                                "website" => array(
                                                    "rule1" => array(
                                                                        "rule" => "notEmpty",
                                                                        "message" => "Please enter website !",
                                                                    ),
                                                    "rule2" => array(
                                                                        "rule" => "url",
                                                                        "message" => "website is not avaliable",
                                                                    ),
                                                ),
                            );
                            
       if($this->validates($this->validate)) 
        return TRUE; 
       else 
        return FALSE;  
    }
?>

Chạy thử ứng dụng : http://localhost/cakephp/valids/demo02

Sử dụng tập luật bằng regular expression

- Thông thường các rule có sẵn không đáp ứng được nhu cầu validation dữ liệu của chúng ta , với những ứng dụng phức tạp đòi hỏi khắc khe về việc nhập liệu thì Cakephp cũng có hổ trợ validation với Regular Expression.

- Để sử dụng Regular Expression thì cú pháp như sau :

'rule' => '/^nội_dung_regular_expression$/i'; 

Ví dụ :

+ 'rule' => '/^[a-z0-9]{4,10}$/i'

Dữ liệu chỉ là chữ thường và số, có từ 4-10 kí tự

+ 'rule' => '/^[a-z A-Z]{1}[a-z A-Z 0-9_]+\@[a-z A-Z 0-9]{2,}\.[a-z A-Z]{2,}$/i '

Kí tự đầu tiên chỉ là các kí tự chữ hoa hoặc thường
Tiếp theo chỉ là các kí tự chữ hoa hoặc thường, số và dấu “_” , các kí tự này có thể xuất hiện hoặc xuất hiện nhiều lần
Tiếp theo là kí tự bắt buộc phải có “@”
Tiếp theo chỉ là các kí tự hoa hoặc thường và số , ít nhất là 2 kí tự
Tiếp theo là kí tự bắt buộc phải có là “.”
Tiếp theo là các kí tự hoa hoặc thường , ít nhất là 2 kí tự

Bắt đầu viết ứng dụng với 2 Regular Expression trên :
- Yêu cầu tạo 1 form nhập liệu với 2 field với các tập luật được mô tả :
- username : với Regular Expression thứ 1
- email : với Regular Expression thứ 2

Trong Controller Valid ta thêm hàm demo03 :

<?php
class ValidsController extends AppController{
    var $name = "Valids";
    var $helpers = array ('Html','Form');
    var $components = array('Session'); // Use Flash messenger of Session component
 
// ---- Valid with Regular Expression
    function demo03(){
                $this->Valid->set($this->data);
                if($this->Valid->valid_03()==TRUE){
                    $this->Session->setFlash("Data is avaliable !");
                }else{
                    $this->Session->setFlash("Data is not avaliable !");
                } 
    }
?>

Trong thư mục app/views/valids/ tạo file demo03.ctp :

<h1>Add Post</h1>
<?php
echo $this->Form->create('Valid', array('action' => 'demo03'));
echo $this->Form->input('username');
echo $this->Form->input('email');
echo $this->Form->end('Register');
?>

Trong model Valid thêm hàm valid_03() :

PHP Code:

<?php
class valid extends  AppModel{  
    var $useTable = false;
    var $validate = array();
    
//------- Valid : Use Regular Expresstion
    function valid_03(){
        $this->validate = array(
                                    "username" => array(
                                                            'rule' => '/^[a-z0-9]{4,10}$/i', 
                                                            'message' => 'Username must be integer and alphabet, between 4-10 characters', 
                                                        ),
                                    "email" => array(
                                                            'rule' => '/^[a-z A-Z]{1}[a-z A-Z 0-9_]+\@[a-z A-Z 0-9]{2,}\.[a-z A-Z]{2,}$/i', 
                                                            'message' => 'email not avaliable',
                                                        ),
                                );
       if($this->validates($this->validate)) 
        return TRUE; 
       else 
        return FALSE;  
    }
?>

Chạy thử ứng dụng : http://localhost/cakephp/valids/demo03

Sử dụng chức năng callback function

- Callback function ở đây có nghĩa là thay vì ta dùng các từ khóa có sẵn hoặc các Regular Expression , mà thay vào đó là tao viết 1 hàm nào đó để kiểm tra dữ liệu
- Thông thường Callback function sử dụng cho các ứng dụng như :
 Kiểm tra username và pasword trước khi đăng nhập
 So sánh các dữ liệu trong database
 So sánh hai mật khẩu nhập có giống nhau không
 …………

Bắt đầu viết ứng dụng với Call Back function :
-Yêu cầu tạo 1 form nhập liệu với 1 field với các tập luật được mô tả :
- username :
Không được rỗng
Dữ liệu nhập vào hợp lệ là chuỗi “admin” nếu không thì báo lỗi, dùng hàm checkUsername để kiểm tra tính hợp lệ đó.

Trong Controller Valid ta thêm hàm demo04 :

<?php
class ValidsController extends AppController{
    var $name = "Valids";
    var $helpers = array ('Html','Form');
    var $components = array('Session'); // Use Flash messenger of Session component  
  //------ Valid with call back function
    function demo04(){
                $this->Valid->set($this->data);
                if($this->Valid->valid_04()==TRUE){
                    $this->Session->setFlash("Data is avaliable !");
                }else{
                    $this->Session->setFlash("Data is not avaliable !");
                }  
    }
?>

Trong thư mục app/views/valids/ tạo file demo04.ctp :

 
<h1>Add Post</h1>
<?php
echo $this->Form->create('Valid', array('action' => 'demo04'));
echo $this->Form->input('username');
echo $this->Form->end('Check');
?>
Trong model Valid thêm hàm valid_04() và hàm checkUsername()
PHP Code:

<?php
class valid extends  AppModel{  
    var $useTable = false;
    var $validate = array();
//------ Valid with call back function
    function valid_04 (){
        $this->validate = array(
                                    "username" => array(
                                                            'rule' => 'checkUsername', 
                                                            'message' => 'Username is not avaliable', 
                                                        ),
                                );
       if($this->validates($this->validate)) 
        return TRUE; 
       else 
        return FALSE; 
    }
//-------- Check Useranme
    function checkUsername(){
        if($this->data['Valid']['username']=="admin"){ // so sánh dữ liệu nhập từ form có tên username
            return true;
        }
        else{
            return false;
        }
    }
?>

Chạy thử ứng dụng : http://localhost/cakephp/valids/demo04

Source các ví dụ trên

Dưới đây là source code gồm 3 phần chính :
- app/controllers/valids_controller.php
- app/models/valid.php
- app/views/valids/....

Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Create Animated GIF on Your Android Mobile with GIFDroid

Create Animated GIF on Your Android Mobile with GIFDroid

GIFDroid is free app foe android mobile phone, which allows you to convert your video in Animated GIF easily

Showbiz - hot girl bánh tráng trộn nói không

Showbiz - hot girl bánh tráng trộn nói không

Cuối tháng 11/2013, Bảo Chi - cô nàng hot girl bán bánh tráng trộn bất ngờ nổi lên như một hiện tượng và xuất hiện nhiều trên các phương tiện thông tin đại chúng. Điều khiến Chi được mọi người tò mò vì một cô chủ hàng bánh tráng trộn bình dân lại có thân hình khá chuẩn, gương mặt đáng yêu, làn da trắng trẻo, mịn màng đặc trưng của con gái vùng núi Đà Lạt.

Máy tính bảng cũng có thể dùng để chữa được bệnh tim

Máy tính bảng cũng có thể dùng để chữa được bệnh tim

Arthur Zang, một kĩ sư trẻ người Cameroon 24 tuổi, đã thiết kế máy tính bảng đầu tiên của châu Phi dùng trong y tế có tên Cardiopad. 

Công ty diệt chuột T&C

 

Diet con trung