Zend Form hỗ trợ chúng ta các hàm dựng sẵn để kiểm tra hay lọc dữ
liệu đầu vào. Điều này giúp ta thuận lợi hơn trong việc kiểm tra dữ liệu
trước khi lưu vào cơ sở dữ liệu.
1. Trong thư mục forms ta tạo một file tên login.php
2. Trong function init ta tiến hành tạo các form element kết hợp với validate và filter
Username Element:
Đoạn code trên, đầu tiên ta add thành phần username vào, sau đó ta tiến hành validate và filter thành phần đó. Ta không cần addValidator Alnum vì ta đã có Validator Regex rồi. Ở đây Zend sẽ kiểm tra hợp lệ cả hai trường hợp, cho dù trường hợp đầu không hợp nhưng Zend vẫn kiểm tra trường hợp sau, điều này là dư thừa nếu chúng ta chỉ quan tâm đến kết quả hợp lệ hay không hợp lệ. Chúng ta chỉ muốn là chỗ nào không hợp lệ thì chỉ thông báo lỗi ở chỗ đó. Để khắc phục lỗi trên ta thêm tham số thứ hai true vào hàm addValidator ở mỗi validator muốn ngắt.
Password Element
3. Trong Controller
Chú ý: Để lấy giá trị từ form đã được Validate và Filter ta sử dụng
4. Trong view
<?php class Form_Login extends Zend_Form { public function init() { // Cac Form Element } }
2. Trong function init ta tiến hành tạo các form element kết hợp với validate và filter
Username Element:
//Username $this->addElement('text','username',array( 'label'=>'Username', 'size'=>21, )); $username = $this->getElement('username'); //Validate //NotEmpty $username->setRequired(true) ->addValidator('NotEmpty',true) ->getValidator('NotEmpty')->setMessage('Username không được bỏ trống.'); //Khong co dau, khoảng trắng và các kí tự đặc biệt $username->addValidator('Regex',true,array('/^[a-zA-Z0-9]*$/')) ->getValidator('Regex')->setMessage('Username không hợp lệ.'); //vì là Login nên để không hợp lệ //Filter $username->addFilter('Stringtrim') ->addFilter('StringToLower'); //End Username
Đoạn code trên, đầu tiên ta add thành phần username vào, sau đó ta tiến hành validate và filter thành phần đó. Ta không cần addValidator Alnum vì ta đã có Validator Regex rồi. Ở đây Zend sẽ kiểm tra hợp lệ cả hai trường hợp, cho dù trường hợp đầu không hợp nhưng Zend vẫn kiểm tra trường hợp sau, điều này là dư thừa nếu chúng ta chỉ quan tâm đến kết quả hợp lệ hay không hợp lệ. Chúng ta chỉ muốn là chỗ nào không hợp lệ thì chỉ thông báo lỗi ở chỗ đó. Để khắc phục lỗi trên ta thêm tham số thứ hai true vào hàm addValidator ở mỗi validator muốn ngắt.
Password Element
//Password $this->addElement('password','password',array( 'label'=>'Password', 'size'=>21 )); $password=$this->getElement('password'); //Validate //NotEmpty $password->setRequired(true) ->addValidator('NotEmpty') ->getValidator('NotEmpty')->setMessage('Password không được bỏ trống'); //Khong co dau, khoảng trắng và các kí tự đặc biệt $password->addValidator('Regex',true,array('/^[a-zA-Z0-9]*$/')) ->getValidator('Regex')->setMessage('Password không hợp lệ.'); //Filter $password->addFilter('StringTrim') ->addFilter('StringToLower'); //End password
3. Trong Controller
public function loginAction()
{
$formLogin= new Form_Login(array('name'=>'formLogin','id'=>'formLogin','action'=>'','method'=>'post'));
// Neu Submit
if( $this->_request->getPost('login') )
{
// Validate
if( $formLogin->isValid($this->_request->getPost()) )
{
// Hợp lệ
// Lấy giá trị từ form
$arrayData=$formLogin->getValues();
// Tới đây có thể sử dung Zend_Auth để chứng thực đăng nhập
}else{
// Không hợp lệ
}
}
$this->view->formLogin=$formLogin;
}
Chú ý: Để lấy giá trị từ form đã được Validate và Filter ta sử dụng
$arrayData=$form->getValues();
4. Trong view
<?php echo $this->formLogin; ?>
Nguồn: Sưu tầm Internet
cho mình hỏi tại sao mình tạo 1 form mới thì validate được, còn khi tạo 1 form có truyền biến vào, như sửa sản phẩm chẳng hạn, thì phải load 1 số thông tin cũ vào thì lại không validate được? chờ bạn giúp... thanks nhiều
Trả lờiXóaVì thành phần form của bạn , nếu bạn muốn sữa xóa đc thì ko nên để nó ở init() , bản chất init() nó như hàm _construct() nó sẽ chạy khi request bạn để 1 phương thức riêng do bạn tự đặt .
Xóa