CodeIgniter Frameworks Lập trình PHP

Giới thiệu CodeIgniter

1. Giới thiệu chung

Codeigniter (CI) là một framework được dùng để xây dựng các ứng dụng web động. Giúp các lập trình viên phát triển web một cách nhanh chóng bằng việc viết sẵn các thư viện hỗ trợ như database, phân trang, form, v.v.

CI cung cấp một giải pháp đơn giản cho việc phát triển web, hiệu năng cao. Dựa trên mô hình MVC ( Model – View – Controller ) với dung lượng nhẹ (nhẹ hơn rất nhiều so với các framework khác). CI hỗ trợ rất nhiều phiên bản PHP khác nhau, do đó các ứng dụng được viết trên CI sẽ có thể chạy được ở nhiều cấu hình hosting khác nhau.

2. Mô hình MVC

MVC là viết tắt của Model – View – Controller làm cho ứng dụng được tách biệt rõ ràng giữa các phần xử lý, giao diện và cơ sở dữ liệu.

  • Model: là phần xử lý, tương tác với dữ liệu. Phần này trực tiếp làm việc với cơ sở dữ liệu của website.
  • View: là phần xử lý giao diện, tất cả các chức năng hiển thị được xử lý tại phần này.
  • Controller: là phần xử lý chính của website. Tất cả các yêu cầu từ người dùng đều thông qua controller. Controller xử lý yêu cầu và gọi Model nếu cần tương tác với dữ liệu, gọi View để hiển thị giao diện.

Với sự tách riêng như thế này, một ứng dụng có thể có nhiều lập trình viên làm việc cùng nhau.

3. Mô hình dòng dữ liệu trong CI

  1. File index.php là file chính nhất, khởi tạo các tài nguyên để chạy CI
  2. Routing xác định yêu cầu từ người dùng để xác định controller nào sẽ được gọi
  3. Caching sẽ kiểm tra cache của trang được yêu cầu, nếu có cache còn trong thời gian hợp lệ (được lập trình viên xác định) thì sẽ trả kết quả về index.php là cache. Nếu không phải thực hiện bước tiếp.
  4. Security được thực thi để đảm bảo mọi truy cập là hợp lệ trước khi controller của chương trình được gọi.
  5. Controller là phần lập trình viên lập trình chính, xử lý với model, tải các view.
  6. Cuối cùng View sẽ được trả về trình duyệt thông qua file index.php

4. Đường dẫn trong ứng dụng CI

Mặc định đường dẫn (URL) của CI được thiết kế để thân thiện với các công cụ tìm kiếm (search engine) và giúp người dùng dễ đọc ví dụ: example.com/news/article/my_article

4.1 Phân đoạn URL

URL của CI được viết theo cấu trúc phân đoạn như sau:

example.com/class/function/ID

Trong đó:

  • Class: là tên controller ( Controller được viết thành một class – sẽ trình bày ở các phần sau ).
  • Function: là tên phương thức (method) trong class của controller được gọi.
  • ID: là phần không bắt buộc, nó là các giá trị truyền vào cho phương thức được gọi.

CI cũng cung cấp các hàm để làm việc với URL một các dễ dàng.

5. Controller của CI

Controller của CI là một lớp hệ thống (System class) được CI viết sẵn cấu trúc. Người lập trình khi viết controller sẽ kế thừa lại từ lớp này. Ví dụ controller Home

<?php

class Home extends CI_Controller {
  function index() {
    echo "Hello world";
  }
}

?>

Phương thức mặc định của controller là index, có nghĩa là trên URL khi chỉ gọi class mà không có function thì CI tự động gọi phương thức index. Sau đây là một ví dụ đầy đủ
example.com/news/view/2

Với URL trên chúng ta có controller là news, function là view, và tham số truyền vào là 2

<?php

class News extends CI_Controller {
  function index() {
    echo "Hello world";
  }

  function view($id) {
    echo "You view the news with ID={$id}";
  }
}

?>

Kết quả hiển thị là

You view the news with ID=2

6. View và Model

Như đã nói ở phần trên, View và Model là các phần xử lý về giao diện và tương tác cơ sở dữ liệu. Trong cấu trúc của CI, các view và model được viết trong các thư mục tương ứng. View và model được gọi trong controller. Ví dụ ở đây chúng ta có view với tên file là home.php ( trong thư mục application/view ) và model home.php (trong thư mục application/model).

<?php

class Home extends CI_Controller {
  function index() {
    $this->load->model('home');
    $data = $this->home->someMethod();

    $this->load->view('home', $data);
  }
}

?>

Đoạn code trên thực hiện load model, sau đó gọi phương thức someMethod() trong model , kết quả trả về là 1 mảng dữ liệu (giả sử). Sau đó gọi view và truyền dữ liệu vào view để hiển thị.

7. Thư viện và các hàm hỗ trợ trong CI

CI hỗ trợ sẵn rất nhiều các thư viện mà ở đây tôi sẽ giới thiệu một số các thư viện thường dùng trong CI. Các thư viện này được CI hỗ trợ cho các lập trình viên để tối ưu hóa thời gian viết ứng dụng, phát triển ứng dụng web một cách nhanh chóng.

Ngoài ra CI cũng cho phép người lập trình phát triển các thư viện riêng của mình (có thể public cho cộng đồng sử dụng). Điều này giúp cho cộng đồng có thể hỗ trợ CI viết thêm các thư viện mà CI không có sẵn (như thư viện xác thực người dùng, thư viện xử lý tập tin office, v.v)

Sau đây là một số thư viện thường dùng trong CI

7.1 Class Database

Thư viện database hỗ trợ đầy đủ tính năng tương tác với cơ sở dữ liệu theo 2 cách, cách truyền thống và sử dụng mẫu Active Record. Với active record, cách chúng ta tương tác với cơ sở dữ liệu sẽ dễ dàng hơn với các phương thức được viết sẵn ví dụ như select(), delete(), update(), v.v

Ngoài ra database của CI còn hỗ trợ rất nhiều các loại hệ quản trị cơ sở dữ liệu khác nhau như mysql, postgres, sqlite, v.v

7.2 Class Xác thực form

Thư viện này hỗ trợ sẵn cho lập trình viên các phương thức xác thực dữ liệu từ form được người dùng gửi đi. Đồng thời hỗ trợ hiển thị thông báo lỗi đến người dùng.
Tuy nhiên thì thư viện này chỉ hỗ trợ một số phương thức xác thực đơn giản và thông dụng. Những yêu cầu xác thực khác phức tạp hơn thì người lập trình có thể viết tích hợp vào được. Đây cũng là một trong những điểm mạnh của CI.

7.3 Class Upload file

Upload file của CI hỗ trợ giúp người lập trình giảm thiểu thời gian viết các hàm về xử lý file upload, kiểm tra loại file hoặc kích thước file. Tất cả mọi thao tác cần làm để xử lý upload file đó là tạo 1 biến cấu hình và gọi thư viện upload.

7.4 Class Session

Session được sử dụng nhiều để lưu thông tin đăng nhập của người dùng hay lưu giỏ hàng tạm thời của khách hàng thăm website. Tuy nhiên session trong CI không sử dụng session mặc định của PHP mà nó sử dụng database để lưu lại session của người dùng để đảm bảo các yêu cầu bảo mật.

7.5 Class Phân Trang

Thư viện phân trang hỗ trợ phân trang nhanh chóng, bên cạnh hỗ trợ phân trang nó còn giúp tạo ra thanh phân trang hiển thị trên website chỉ với các cấu hình đơn giản khi lập trình.

7.6 Class caching

Caching là kỹ thuật tạo bộ đệm giúp cho việc xử lý website được cải thiện rất nhiều do trang đã được lưu trong bộ đệm và không cần xử lý các xử lý phức tạp khác.

8. Cơ chế bảo mật trong CI

CI cung cấp các hàm tiện ích để chống lại các hình thức tấn công như XSS, validate dữ liệu input. Với mọi thao tác quan trọng, dữ liệu nhạy cảm đều được CI quản lý để ngăn chặn tấn công.

9. Đánh giá về Codeigniter

Điểm mạnh:

  • CI là một framework mạnh, nhẹ, miễn phí. Thích hợp với người mới tìm hiểu.
  • CI giúp các lập trình viên giảm thời gian xây dựng website.
  • CI hỗ trợ cho lập trình viên xây dựng các thư viện tích hợp.
  • CI được cộng đồng thiết kế web PHP yêu thích sử dụng.

Điểm yếu:

  • CI chưa hỗ trợ đăng nhập.
  • CI chưa hỗ trợ các thư viện template ( nhưng vẫn có thể tích hợp)
  • CI chưa hỗ trợ ajax.