Controllers và Views trong CodeIgniter 3x

Hướng dẫn tạo Controllers và Views trong CodeIgniter theo quy trình MVC và cấu hình đường link đẹp .html
  • 10:49 29/09/2016
  • Kỳ Nhân
  • 0 Bình luận
  • 1178

Khi tương tác với CodeIgniter các bạn cần quan tâm các folder trong application.

  • Config folder này chứa các file cấu hình để web chạy
  • Controllers folder này chứa các Controllers điều hướng web
  • Models folder này chứa các hàm xử lý trong Controllers
  • Views folder này chứa các file giao diện để hiển thị trang web.

Còn các folder khác cũng ít sử dụng nên khi nào làm tới mình sẽ nói về chức năng của nó.

Đầu tiên các bạn vào application/controllers sẽ thấy file Welcome.php như bên dưới

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
    public function index() {
        $this->load->view('welcome_message');
    }
}

Dòng defined('BASEPATH') OR exit('No direct script access allowed'); có tác dụng cấm khi truy cập thẳng vào file. Ví dụ như localhost/ci/application/controllers/Welcome.php

Function index() là mặc định chạy khi truy cập vào controller Welcome.

Nhìn vào dòng code $this->load->view('welcome_message'). Dòng này nghĩa là khi controller Welcome được gọi, sẽ load file welcome_message.php tại folder view. Các bạn có thể mở file welcome_message.php trong folder views tai application/ views để rõ hơn.

Vậy muốn load file khác thì sao? Các bạn tạo file test.php trong views với nội dung

<?php 
echo "test load view";
?>

Sửa dòng $this->load->view('welcome_message') thành $this->load->view(‘test’) hoặc $this->load->view(‘admin/test’) thôi. Vào link localhost/ci thấy hiện ra kết quả khác liền.

Các bạn có thể tìm hiểu thêm hàm Load tại: http://www.codeigniter.com/user_guide/general/views.html

Các controller tạo ra phải thừa hưởng từ CI_Controller và phải viết hoa chữ cái đầu tiên.

Vậy tạo Controller làm gì? Khi bạn vào link localhost/ci đã hiện text welcome, nghĩa là controller welcome. Giờ bạn có link link localhost/ci/product/ muốn load lên trang product thì làm thế nào? Như vậy các bạn cần tạo controller tên là Product.

Trước tiên Bạn vào folder controllers tao 1 file Product.php với nội dung ( tốt nhất copy file Welcome.php ra rồi sửa thành Product.php cho nhanh)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Product extends CI_Controller {
    public function index() {
        $this->load->view('product');
    }
}

Trong folder views tạo file product.php với nội dung

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
echo "trang san pham";
?>

Rồi vào link localhost/ci/product/ sẽ thấy kết quả.

Tới đây có lẽ các bạn hiểu sơ sơ rồi đúng không. Vậy tại sao khi mới load trang lại chạy Controller Welcome mà không phải chạy Controller Product mà mình vừa tạo?

Để hiểu thêm các bạn vào application/config/routes.php. File routes.php này giúp điều hướng các link tới Controller tương ứng, khi nào tới mình sẽ nói thêm. mở ra và xem sẽ thấy dòng $route['default_controller'] = 'welcome'. Các bạn muốn thay bằng Controller nào cũng được ví dụ như $route['default_controller'] = 'product'. Và chạy link localhost/ci sẽ thấy hiện nội dung của trang product.

Giờ thử link localhost/ci/product.html cái nào. => báo lỗi 404 . Phải làm sao đây?

CodeIgniter có hỗ trợ cấu hình suffix hay nôm na là phần đuôi của url trong file config.php tại đường dẫn application/config/config.php, mở ra tìm tới dòng $config['url_suffix'] = ''; hiện tại là rỗng, bạn muốn link .html thì sửa thành $config['url_suffix'] = '.html'; là ok. Giờ vào lại link localhost/ci/product.html thấy hết báo lỗi.

Chúc các bạn thành công!