NTM Solutions

Facebook Youtube Google+

Thứ Ba, 30 tháng 10, 2018

CI-Bài 01-Trang tĩnh trong CodeIgniter


XEM MỤC LỤC CÁC BÀI VIẾT CODEIGNITER

Cài đặt framework CodeIgniter


Ghi chú: bài hướng dẫn này chỉ thực hiện được khi bạn đã tải xuống và cài đặt framework CodeIgniter 3.1.9 trong môi trường lập trình web PHP của bạn.

Đường dẫn tải CodeIgniter: https://codeigniter.com/download

->chọn : Download CodeIgniter 3 và giải nén vào 01 thư mục (Ví dụ: CI) trong thư mục www

Ta sẽ có các thư mục con như: application,system,…Đến đây là xong phần cài đặt framework Code Igniter

Điều đầu tiên bạn cần làm là thiết lập 01 controller để xử lý các trang tĩnh.


01 controller đơn giản là 01 lớp giúp ủy quyền 01 hoạt động.

Nó là chất kết dính trong ứng dụng web của bạn.

Ví dụ khi có 01 truy cập đến đường dẫn:


Chúng ta có thể tưởng tượng rằng có 01 controller tên là “news”. Phương thức được gọi trên news sẽ là “latest”. Công việc của phương thức này có thể là thu lượm 10 mẩu tin mới nhất, và hiển thị chúng lên trang web. Trong cấu trúc MVC ta rất thường gặp 01 kiểu bố trí URL như vầy:


Trong loạt bài này mình sẽ chạy framework CodeIgniter trên môi trường localhost nên đường dẫn đến 01 controller sẽ là:


Cũng có thể bố cục URL trong thực tế sẽ phức tạp hơn, nhưng bây giờ tạm thời là vậy.

Ta tạo 01 tập tin tại application/controllers/Pages.php chứa đoạn mã sau:

<?php

class Pages extends CI_Controller {



        public function view($page = 'home')

        {

        }

}

Ta đã tạo ra 01 lớp có tên là Pages, với 01 phương thức view chấp nhận 01 tham số tên là $page. Lớp Pages kế thừa từ lớp CI_Controller . Điều này có nghĩa là lớp mới pages có thể truy cập các phương thức và các biến xác định trong lớp CI_Controller  (system/core/Controller.php).

Controller sẽ trở thành trung tâm của mọi truy vấn đến ứng dụng web của bạn. Trong các thảo luận về CodeIgniter nó được xem như là 01 siêu chủ đề. Cũng giống như bất kỳ lớp php nào, bạn có thể truy cập bên trong các controllers của bạn bằng biến $this. Dùng biến $this là cách để ta tải các thư viện, các views, và các lệnh chính của framework.

Bây giờ bạn tạo phương thức đầu tiên của mình , bằng cách tạo vài trang biểu mẫu cơ bản. Chúng ta sẽ tạo 02 trang “views” (trang mẫu) để hiển thị phần footer và header.

Tạo trang header tại application/views/templates/header.php và gõ đoạn mã sau:

<html>

        <head>

                <title>Hướng dẫn CodeIgniter</title>

        </head>

        <body>



                <h1><?php echo $title; ?></h1>

Trang header chứa các đoạn mã HTML cơ bản của phần đầu trang web mà bạn muốn hiển thị trước khi tải xuống phần view chính. Nó cũng xuất ra biến $title , mà chúng ta sẽ khai báo sau trong controller. Bây giờ, tạo 01 trang footer tại application/views/templates/footer.php chứa đoạn mã sau:

                <em>&copy; 2015</em>

        </body>

</html>



Thêm logic vào controller


Trước đây bạn thiết lập 01 controller với 01 phương thức tên là view() . Phương thức chấp nhận 01 tham số là tên của trang sẽ được tải. Các trang tĩnh mẫu sẽ đặt ở thư mục application/views/pages/

Trong thư mục đó , ta tạo 02 tập tin tên là home.phpabout.php. Bên trong các tập tin này , gõ dòng chữ nào đó và lưu lại (Ví dụ: “Lophocvitinh.COM xin chào CodeIgniter!”).

Để tải các trang đó, bạn sẽ phải kiểm tra các trang được yêu cầu có thực sự tồn tại hay không:

public function view($page = 'home')

{

        if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))

        {

                // Xin lỗi, chúng tôi không có 01 trang như vậy!

                show_404();

        }



        $data['title'] = ucfirst($page); // Viết Hoa đầu từ



        $this->load->view('templates/header', $data);

        $this->load->view('pages/'.$page, $data);

        $this->load->view('templates/footer', $data);

}

Bây giờ, nếu bạn tạo đủ các trang trên nó sẽ được tải xuống, bao gồm cả phần header và footer, và hiển thị lên trình duyệt của người dùng. Nếu các trang home không tồn tại thông báo “404 Page not found” sẽ xuất hiện.

Dòng đầu tiên trong phương thức này kiểm tra trang home.php có tồn tại không. Hàm file_exists() của PHP được dùng để kiểm tra tập tin có tồn tại ở nơi mong muốn không. Hàm show_404() là 01 hàm riêng của CodeIgniter dùng hiển thị trang lỗi mặc định.

Trong phần header mẫu, biến $title dùng để tùy biến tiêu đề trang. Giá trị tiêu đề được xác định trong phương thức này, nhưng thay vì gán giá trị vào biến, nó được gán vào phần tử title trong mảng $data (trong ví dụ này là chữ home)

Điều cuối cũng phải làm là tải các views trong dự tính của chúng ta. Tham số thứ 02 trong phương thức view() được dùng để đưa giá trị vào view. Mỗi giá trị trong mảng $data được gán vào 01 biến với tên cũng là từ khóa. Như vậy giá trị của $data['title'] trong controller tương đương với biến $title trong phần view(tập tin header.php).

Định tuyến


Controller bây giờ đã hoạt động rồi ! Gõ vào trình duyệt của bạn đường dẫn sau [your-site-url]index.php/pages/view . Khi bạn vào index.php/pages/view/about bạn sẽ thấy nội dung trang  about.php (có cả phần header và footer).

Sử dụng các rules để định tuyến, bạn có quyền gắn bất kỳ URI vào bất kỳ controller và phương thức nào mong muốn, phá vỡ mọi quy tắc dựng sẵn:

http://example.com/[lớp-controller]/[phương-thức-controller]/[tham-số]

Ta hãy thử làm xem sao. Mở tập tin định tuyến tại application/config/routes.php và thêm vào 02 dòng sau . Xóa hết các dòng mã liên quan đến mảng $route

$route['default_controller'] = 'pages/view';

$route['(:any)'] = 'pages/view/$1';

CodeIgniter đọc các qui tắc định tuyến từ trên xuống dưới và hướng các yêu cầu vào qui tắc nó thấy trùng khớp đầu tiên. Mỗi qui tắc là 01 regular expression (left-side) khớp với 01 controller và tên phương thức phân cách bằng dấu sổ phải /. Khi có 01 yêu cầu tới máy chủ, CodeIgniter tìm kiếm câu lệnh khớp đầu tiên, sau đó gọi controller và phương thức thích hợp, có thể kèm theo cả các tham số.

Để biết thêm về định tuyến bạn có thể đọc phần URI Routing trong tài liệu User Guide.

Dòng qui tắc đầu khai báo controller mặc định là pages/view (thay vì welcome như cài đặt ban đầu). Với pages là tên controller, view là tên phương thức.

Ở đây, dòng qui tắc thứ 02 trong mảng $routes dùng chữ đại diện (:any) nghĩa là với bất kỳ yêu cầu nào sẽ gán đường dẫn đến phương thức view() của lớp Pages

Bây giờ bạn truy cập index.php/about. Nó sẽ tự chuyển đến phương thức view() trong controller pages? Thật là vi diệu phải không nào!

Như vậy trong hướng dẫn này chúng ta đã tạo ra 05 trang:

application/controllers/Pages.php

application/views/templates/header.php

application/views/templates/footer.php

application/views/pages/home.php

application/views/pages/about.php

Và sửa tập tin:

application/config/routes.php

Nếu vẫn chưa rõ các bạn xem thêm video clip sau:

XEM MỤC LỤC CÁC BÀI VIẾT CODEIGNITER

By #tiensim
Nguồn: User Guide của CodeIgniter