Trong tutorial này tôi sẽ hướng dẫn các bạn viết một site đơn giản chưa sử dụng đến database.
Mặc định trong series này tôi sẽ demo trên localhost với project learnci được tạo trong bài 1.
Đối với một số bạn chưa có kinh nghiệm với PHP và MVC thì bài viết này có thể hơi khó hiểu (do tôi lấy từ nguồn user guide của CodeIgniter). Tuy nhiên các bạn không cần phải lo lắng, một số bài viết sau tôi sẽ nói rõ hơn về mô hình này. Nào cùng bắt đầu!
Việc đầu tiên là phải tạo controller để xử lý request. Ví dụ request như sau:
localhost/learnci/news/latest/10.
Request trên sẽ gọi đến method latest trong controller News với giá trị tham số truyền vào là 10. Một cách đơn giản URL trong CodeIgniter có dạng điển hình như sau:
domain_name/controller_class/method/arguments.
URL có thể tùy biến và trong một số trường hợp, có thể phức tạp hơn. Tuy nhiên trong phạm vi bài viết này ta không đề cập.
Bây giờ tạo file application/controllers/pages.php với nội dung:
<?phpclass Pages extends CI_Controller {public function view($page = ‘home’){}}
Chúng ta vừa tạo một controller class tên Pages, trong đó có method view với tham số truyền vào $page (mặc định là ‘home’). Class này extends CI_Controller. Mọi controller class trong CodeIgniter đều phải extends class này (xem trong system/core/Controller.php).
Tiếp theo là tạo một templates đơn giản trong views. Thông thường một page có 3 phần: header, content, footer. Trong đa số website thì phần header và footer có cấu trúc giống nhau, cho nên việc tách page thành 3 phần như trên sẽ giúp quản lý mã nguồn tốt hơn và tái sử dụng.
Tạo file application/views/templates/header.php với nội dung:
<html><head><title><?php echo $title ?> – CodeIgniter 2 Tutorial</title></head><body><h1>CodeIgniter 2 Tutorial</h1>
Trong file header.php có biến $title sẽ là biến chứa tiêu đề page mà sau này ta sẽ truyền giá trị cho nó trong controller.
Tương tự ta cũng tạo file application/views/templates/footer.php :
Trong application/views/pages tạo một vài file, ví dụ: home.php và about.php, đặt nội dung tùy ý bạn.
Bây giờ trong controller viết chi tiết method view như sau:
public function view($page = ‘home’){if ( ! file_exists(APPPATH.‘/views/pages/’.$page.‘.php’)){// Không tìm thấy file page trong viewshow_404();}$data[‘title’] = $page;$this->load->view(‘templates/header’, $data);$this->load->view(‘pages/’.$page, $data);$this->load->view(‘templates/footer’, $data);}
Trong trường hợp không tìm thấy page controller sẽ điều hướng đến file 404. Ngược lại nó sẽ load view thông qua câu lệnh: $this->load->view(‘view-file’, $data);
Như đã nói ở trên, trong views/templates/header.php có biến $title, biến này nhận giá trị thông qua $data[‘title’]. Mảng $data được sử dụng để truyền giá trị cho mọi biến ở trong views.
Bật trình duyệt và gõ, ví dụ: localhost/learnci/index.php/pages, localhost/learnci/index.php/pages/home, localhost/learnci/index.php/pages/about và xem kết quả.