Username: Password:
27/31 Giáo trình: PHP Framework Giảng viên:Bùi Quốc Huy Kế tới, ta cần tạo khống chế người sử dụng truy cập Có nghĩa kiểm sốt người truy cập chưa đăng nhập khơng thể truy cập vào controller action module admin Cách giải tốt class chủ đạo: QHO_Controller_Action ta thêm đoạn code kiểm tra session Nếu người dùng truy cập vào controller action khác mà chưa đăng nhập họ tự động đẩy tới Action Cụ thể sau: $data1=$this->_request->getParams(); $this->view->placeholder('Login')->login = false; $auth = Zend_Auth::getInstance(); if($auth->getIdentity()){ $this->view->placeholder('Login')->login = true; } else{ if($data1['controller'] != 'user' || $data1['action'] !='login'){ $this->_redirect('/admin/user/login/'); } } Quá trình hiểu giản đơn sau: + Đầu tiên ta lấy tất tham số từ phía người dùng (module nào, controller nào, action nào) + Kế tới ta sử dụng biến placeholder tên Login gán chúng mặc định false + Khởi tạo đối tượng Zend_Auth + Kiểm tra xem có tồn tham số session Zend_Auth hay khơng ? + Nếu có gán biến placeholder true + Nếu không ta kiểm tra xem controller họ truy cập liệu có khác user action mà họ truy cập có khác login hay không Nếu chúng khác ta đẩy họ tới trang login để thực thi việc đăng nhập vào hệ thống Như vậy, code diễn tiến ta có kết sau: Chú ý rằng, phần xử lý Ta sử dụng biến placeholder tên Login nhiều Việc sử dụng biến thực chất sử dụng để khống chế layout Vì 28/31 Giáo trình: PHP Framework Giảng viên:Bùi Quốc Huy sử dụng hình rõ ràng người chưa đăng nhập thấy menu, layout thơng tin nhạy cảm trang admin Vì ta cần dùng biến placeholder để kiểm tra layout Lúc ta có code triển khai sau layout.phtml module admin Vậy biến placeholder Login có giá trị true (tức người dùng đăng nhập) ta gán layout hiển thị bao gôm top, left, bottom Như người thấy Ngược lại, ta show form login mà Nhưng, vấn đề mà gặp phải trang người dùng phải kiểm tra ? Vì ta viết QHO_Controller_Action có nghĩa gọi module default admin Do đó, hồn tồn khơng tối ưu triển khai chúng module 29/31 Giáo trình: PHP Framework Giảng viên:Bùi Quốc Huy Lúc này, ta cần tách thêm class thực nhiệm vụ giao cho module tương ứng Cụ thể module admin ta có class riêng dành cho như: QHO_Controller_Admin, dĩ nhiên class kế thừa từ tảng class QHO_Controller_Action chúng thừa hưởng đặc tính mà Action vốn có Vậy library/QHO/Controller/ ta tạo thêm file admin.php với nội dung mà ta đề cập Và nhớ để kế thừa hàm init() action.php ta cần phải khai báo từ khóa parent Vậy code tương đương sau: