hình ảnh minh họa
Sau đây, chúng ta sẽ đi tìm hiểu quá trình Kiểm tra tính hợp lệ của dữ liệu trong CakePHP Framework (Data Validation). Để sử dụng Data Validation thì chúng ta phải có 2 thành phần chính :
Thành phần Form Helper sử dụng cho việc tạo Form :
<?phpThành phần namespace validate : sử dụng các tập luật để validation dữ liệu :
var $helpers = array("Html", "Form")
?>
<?php
var $validate = array(tập_luật);
?>
Xây dựng ứng dụng Data Validation
Tạo một controller valid trong thư mục app/controllers có tên là valids_controller.php
<?phpTạo một model trong thư mực app/model có tên là valid.php
class ValidsController extends AppController{
var $name = "Valids";
var $helpers = array ('Html','Form');
var $components = array('Session');
?>
<?phpSử dụng điều kiện kiểm tra cho các trường
class valid extends AppModel{
var $useTable = false; // không sử dụng bảng trong CSDL
var $validate = array(); // name space mặc ðịnh khi sử dụng datavalidation
?>
Giả sử đưa ra yêu cầu tạo 1 form nhập liệu với 2 trường với các điều kiện sau:
– title : không được phép rỗng
– info : không được phép rỗng
Ta tạo một function valid1() để thực thi :
<?php
class ValidsController extends AppController{
var $name = "Valids";
var $helpers = array ('Html','Form');
var $components = array('Session');
function valid1(){
$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 !");
}
?>
Để kích hoạt chức năng Data Validation ta sử dụng cú pháp
$this->Valid->set($this->data)
Sau đó model valid sẽ gọi hàm valid_o1() để kiểm tra điều kiện cho các trường tương ứng.
Trong thư mục app/views/valid ta tạo một file có tên là valid1.ctp có nội dung như sau :
<h1>Add Post</h1>Để validate dữ liệu chúng ta sử dụng namespace validate ($this->validate) để gán tập luật cho các trường
<?php
echo $this->Form->create('Valid', array('action' => 'valid1'));
echo $this->Form->input('title');
echo $this->Form->input('info');
echo $this->Form->end('Register');
?>
$this->validates($this->validate)Sử dụng từ khóa rule để chỉ tập luật và từ khóa notEmpty để chỉ không được rỗng. Một số tập luật thông dụng
§ ‘rule’ => ‘alphaNumeric’ : chỉ có số hoặc chữSử dụng nhiều tập luật cho một trường
§ ‘rule’ => array(‘between’, 6, 32) : giá trị nằm trong khoản từ 6-32
§ ‘rule’ => array(‘comparison’, ‘>=’, 6) : giá trị phải lớn hơn 6
§ ‘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
Như phần trên, trong quá trình lap trinh PHP chúng ta chỉ kiểm tra một điều kiện không rỗng đối với trường title và trường info. Giả sử chúng ta muốn kiểm tra nhiều hơn 1 điều kiện như :
– Trường title: không được rỗng, số ký tự lớn hơn 8 và chỉ có số hoặc chữ
Ta tùy chỉnh lại file valid.php trong model như sau:
<?phpTrong nhiều trường hợp các rule có sẵn không thể giải quyết được yêu cầu đặt ra, lúc này chúng ta phải sử dụng đến biểu thức chính quy (Regular Expression)
class valid extends AppModel{
var $useTable = false;
var $validate = array();
function valid_01(){
$this->validate = array(
"title"=>array(
"rule1" => array(
"rule" => "notEmpty",
"message" => "Title không được để trống",
),
"rule2" => array(
"rule" => array('minLength', 8),
"message" => "Số ký tự phải lớn hơn 8",
),
"rule3" => array(
"rule" => array('alphaNumeric'),
"message" => "Title chỉ bao gồm số hoặc chữ",
),
),
);
if($this->validates($this->validate))
return TRUE;
else
return FALSE;
}
?>
Ví dụ: Điều kiện cho title là số ký tự lớn hơn 8 và chỉ bao gồm chữ hoặc số
'rule' => '/^[A-z0-9]{8,}$/'Sử dụng callback function
Callback function là thay vì sử dụng các từ khóa có sẵn hay biểu thức chính quy để kiểm tra quy luật thì ta còn có thể viết một hàm để kiểm tra các quy luật đó.
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 valid2 :
<?phpTrong thý mục app/views/valids/ tạo file valid2.ctp :
class ValidsController extends AppController{
var $name = "Valids";
var $helpers = array ('Html','Form');
var $components = array('Session');
function valid2(){
$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 !");
}
}
?>
<h1>Add Post</h1>Trong model Valid thêm hàm valid_02() và hàm checkUsername()
<?php
echo $this->Form->create('Valid', array('action' => 'demo04'));
echo $this->Form->input('username');
echo $this->Form->end('Check');
?>
<?php
class valid extends AppModel{
var $useTable = false;
var $validate = array();
function valid_02 (){
$this->validate = array(
"username" => array(
'rule' => 'checkUsername',
'message' => 'Username is not avaliable',
),
);
if($this->validates($this->validate))
return TRUE;
else
return FALSE;
}
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;
}
}
?>
Nguồn: the gioi web
0 nhận xét:
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.