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.
26 trang |
Chia sẻ: vietpd | Lượt xem: 2083 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu CakePHP Framework: Kiểm tra tính hợp lệ của dữ liệu (data validation), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CakePHP Framework: Kiểm tra tính hợp lệ của dữ
liệu (data validation)
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.
A- 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
1 <?php
2 var $helpers = array ('Html','Form');
3 ?>
+ Thành phần namespace validate : sử dụng các tập luật để validation dữ liệu
1 <?php
2 var $validate = array(tập_luật);
3 ?>
B.Cài đặt Cakephp và viết ứng dụng datavalidation :
Việc thực hiện cài đặt CakePHP là không khó. Nếu bạn vẫn chưa biết làm thì
có thể (Xem lại bài CakePHP Framework cho người mới bắt đầu).
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)
1 <?php
2 class ValidsController extends AppController{
3 var $name = "Valids";
4 var $helpers = array ('Html','Form');
5
var $components = array('Session'); // Use Flash messenger of Session
component
6 ?>
Chuẩn bị cho Controller Valids : (app/models/valid.php)
1 <?php
2 class valid extends AppModel{
3
var $useTable = false; // không sử dụng table valid ðồng nghĩa là không sử
dụng database
4 var $validate = array(); // name space mặc ðịnh khi sử dụng datavalidation
5 ?>
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
C. 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 :
01 <?php
02 class ValidsController extends AppController{
03 var $name = "Valids";
04 var $helpers = array ('Html','Form');
05
var $components = array('Session'); // Use Flash messenger of Session
component
06 // ---- Valid one rule
07 function demo01(){
08 $this->Valid->set($this->data);
09 if($this->Valid->valid_01()==TRUE){
10 $this->Session->setFlash("Data is avaliable !");
11 }else{
12 $this->Session->setFlash("Data is not avaliable !");
13 }
14 }
15 ?>
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 :
1 Add Post
2 <?php
3 echo $this->Form->create('Valid', array('action' => 'demo01'));
4 echo $this->Form->input('title');
5 echo $this->Form->input('info');
6 echo $this->Form->end('Register');
7 ?>
+ Để 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 coi 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 :
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
D. 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 :
01 <?php
02 class ValidsController extends AppController{
03 var $name = "Valids";
04 var $helpers = array ('Html','Form');
05
var $components = array('Session'); // Use Flash messenger of Session
component
06 // ---- Valid multi rules
07 function demo02(){
08 $this->Valid->set($this->data);
09 if($this->Valid->valid_02()==TRUE){
10 $this->Session->setFlash("Data is avaliable !");
11 }else{
12 $this->Session->setFlash("Data is not avaliable !");
13 }
14 }
15 ?>
Trong thý mục app/views/valids/ tạo file demo02.ctp :
1 Add Post
2 <?php
3 echo $this->Form->create('Valid', array('action' => 'demo02'));
4 echo $this->Form->input('username');
5 echo $this->Form->input('email');
6 echo $this->Form->input('website');
7 echo $this->Form->end('Register');
8 ?>
Trong model Valid thêm hàm valid_02() :
01 <?php
02 class valid extends AppModel{
03 var $useTable = false;
04 var $validate = array();
05 //-------- Valid : Multi rule
06 function valid_02(){
07 $this->validate = array(
08 "username"=>array(
09 "rule1" => array(
10 "rule" => "notEmpty",
11 "message" => "Username can not empty",
12 ),
13 "rule2" => array(
14 "rule" => array('minLength', 4),
15 "message" => "Usernames must be at least 4 characters long",
16 ),
17 "rule3" => array(
18 "rule" => array('maxLength', 10),
19 "message" => "Usernames must be no larger than 10 characters long",
20 ),
21 ),
22 "email" => array(
23 "rule1" => array(
24 "rule" => "notEmpty",
25 "message" => "Please enter email !",
26 ),
27 "rule2" => array(
28 "rule" => "email",
29 "message" => "Email not avaliable !",
30 ),
31 ),
32 "website" => array(
33 "rule1" => array(
34 "rule" => "notEmpty",
35 "message" => "Please enter website !",
36 ),
37 "rule2" => array(
38 "rule" => "url",
39 "message" => "website is not avaliable",
40 ),
41 ),
42 );
43 if($this->validates($this->validate))
44 return TRUE;
45 else
46 return FALSE;
47 }
48 ?>
Chạy thử ứng dụng :
E. 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 :
1 <?php
2 'rule' => '/^nội_dung_regular_expression$/i';
3 ?>
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 :
01 <?php
02 class ValidsController extends AppController{
03 var $name = "Valids";
04 var $helpers = array ('Html','Form');
05
var $components = array('Session'); // Use Flash messenger of Session
component
06 // ---- Valid with Regular Expression
07 function demo03(){
08 $this->Valid->set($this->data);
09 if($this->Valid->valid_03()==TRUE){
10 $this->Session->setFlash("Data is avaliable !");
11 }else{
12 $this->Session->setFlash("Data is not avaliable !");
13 }
14 }
15 ?>
Trong thý mục app/views/valids/ tạo file demo03.ctp :
1 Add Post
2 <?php
3 echo $this->Form->create('Valid', array('action' => 'demo03'));
4 echo $this->Form->input('username');
5 echo $this->Form->input('email');
6 echo $this->Form->end('Register');
7 ?>
Trong model Valid thêm hàm valid_03() :
01 <?php
02 class valid extends AppModel{
03 var $useTable = false;
04 var $validate = array();
05 //------- Valid : Use Regular Expresstion
06 function valid_03(){
07 $this->validate = array(
08 "username" => array(
09 'rule' => '/^[a-z0-9]{4,10}$/i',
10
'message' => 'Username must be integer and alphabet, between 4-10
characters',
11 ),
12 "email" => array(
13
'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',
14 'message' => 'email not avaliable',
15 ),
16 );
17 if($this->validates($this->validate))
18 return TRUE;
19 else
20 return FALSE;
21 }
22 ?>
Chạy thử ứng dụng :
F. 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 :
01 <?php
02 class ValidsController extends AppController{
03 var $name = "Valids";
04 var $helpers = array ('Html','Form');
05
var $components = array('Session'); // Use Flash messenger of Session
component
06 //------ Valid with call back function
07 function demo04(){
08 $this->Valid->set($this->data);
09 if($this->Valid->valid_04()==TRUE){
10 $this->Session->setFlash("Data is avaliable !");
11 }else{
12 $this->Session->setFlash("Data is not avaliable !");
13 }
14 }
15 ?>
Trong thý mục app/views/valids/ tạo file demo04.ctp :
1 Add Post
2 <?php
3 echo $this->Form->create('Valid', array('action' => 'demo04'));
4 echo $this->Form->input('username');
5 echo $this->Form->end('Check');
6 ?>
Trong model Valid thêm hàm valid_04() và hàm checkUsername()
01 <?php
02 class valid extends AppModel{
03 var $useTable = false;
04 var $validate = array();
05 //------ Valid with call back function
06 function valid_04 (){
07 $this->validate = array(
08 "username" => array(
09 'rule' => 'checkUsername',
10 'message' => 'Username is not avaliable',
11 ),
12 );
13 if($this->validates($this->validate))
14 return TRUE;
15 else
16 return FALSE;
17 }
18 //-------- Check Useranme
19 function checkUsername(){
20
if($this->data['Valid']['username']=="admin"){ // so sánh dữ liệu nhập từ
form có tên username
21 return true;
22 }
23 else{
24 return false;
25 }
26 }
27 ?>
Chạy thử ứng dụng :