14/12/16

Controller và URLs trong CodeIgniter Framework

Ở bài trước chúng ta đã cùng nhau tìm hiểu tổng quan về CodeIgniter framework và chạy ứng dụng đầu tiên,nếu các bạn chưa xem bài trước thì hãy xem lại để sang bài này dễ tiếp cận hơn nhé, sang bài hôm nay chúng ta sẽ tìm hiểu kỹ hơn về Controller cũng như các phân đoạn trên link url của CodeIgniter nhé.

Tìm hiểu về CodeIgniter Framework URLs

– Mặc định các truy vấn đều gọi qua trang index.php
– Các phân đoạn trên 1 url có dạng:
example.com/class/function/ID
Trong đó thì:
  1. Phân đoạn đầu đại diện cho class (hay controller) được gọi lên
  2. Phân đoạn 2 đại diện cho phương thức trong class(hay action trong controller)
  3. Phân đoạn 3 trở đi đại diện cho các tham số của phương thức hoặc các biến gửi lên url
– Lấy các giá trị phân đoạn trên link url:
+ Để lấy giá trị các phân đoạn trên link url các bạn có thể sử dụng cú pháp:
1
$this->uri->segment('n');
Trong đó n chính là vị trí các phân đoạn trên link url
Ví dụ:
example.com/product/view/1
Với link trên ta sẽ lấy các giá trị của phân đoạn như sau:
1
2
3
echo $this->uri->segment('1'); //trả về product
echo $this->uri->segment('2'); //trả về view
echo $this->uri->segment('3'); //trả về 1
Như các bạn thấy thì phân đoạn thứ nhất trả về product,phân đoạn 2 trả về view và phân đoạn 3 trả về 1.Dựa vào các phân đoạn này các bạn hoàn toàn có thể gửi cũng như nhận dữ liệu 1 cách dễ dàng.
Chú ý:Trong trường hợp mà link url đã được rewrite thì các bạn lên sử dụng
1
$this->uri->rsegment('n');
để có thể lấy chính xác các phân đoạn theo ý muốn.

Bỏ file index.php trên link url

– Mặc định file index.php sẽ được hiển thị trên link url ,ví dụ:
example.com/index.php/user/login
Để có thể bỏ index.php trên link url ta tạo file .htaccess ngang hàng với file index.php với nội dung:
1
2
3
4
5
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
Lúc này đường link của chúng ta có thể viết lại dưới dạng:
example.com/user/login
Với đường link dạng này thì các bạn thấy phần đoạn thứ nhất trên link url chính là controller,phần đoạn 2 là tên phương thức(action),phân đoạn 3 (nếu có) sẽ là tham số trong phương thức

Tìm hiểu về CI Controller

– Đây chính là 1 phần trong mô hình MVC
– Quy tắc đặt tên controller và file controller:
+ Tên controller phải viết hoa ký tự đầu tiên
+ Tên file controller giống tên class và viết thường
Ví dụ:
1
2
3
4
5
<?php
class Test extends CI_Controller {
    //đây là 1 controller hợp lệ
}
?>
1
2
3
4
5
<?php
class test extends CI_Controller {
    //đây là 1 controller không hợp lệ,do tên controller viết thường chữ cái đầu
}
?>
Class Constructors: chúng ta có 1 chú ý đó là nếu trong controller các bạn xây dựng hàm khời tạo (__construct()) thì cần kế thừa lại hàm khởi tạo của CI_Controller
Ví dụ:
1
2
3
4
5
6
7
8
9
<?php
class Test extends CI_Controller {
       public function __construct()
       {
            parent::__construct();
            // Your own constructor code
       }
}
?>
– Như các đã thực hiện trong bài viết ứng dụng đầu tiên trong CodeIgniter thì các bạn thấy khi download thư viện CodeIgniter về chạy thì mặc định sẽ chạy controller Welcome,vậy giờ chúng ta muốn thay đổi controller chạy mặc đinh sẽ làm như sau:
+ Truy cập vào application/config/routes.php
+ Thay đổi biến:
1
$route['default_controller'] = ‘ten_controller';
Ví dụ: mặc định chạy controller index:
1
$route['default_controller'] = ‘index';
– Khi truy cập link :
example.com/user/login
lúc này chúng ta đang gọi tới controller (class) tên là user và phương thức là login,mặc định nếu không có phương thức được gọi ra thì nó sẽ chạy phương thức index() trong controller
– Ví dụ:
Tạo 1 controller có tên index.php với nội dung
1
2
3
4
5
6
7
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Index extends CI_Controller {
    public function index()
    {
        echo ‘Bài học về Controller trong CodeIgniter tại hocphp.info';
    }
}
  • Dòng if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’); là dòng Security bảo vệ file của các bạn, nó không cho truy cập thẳng vào file mà phải thông qua file index.php ở mức ngoài cùng.
  • Tên controller là Index,và nó phải bắt đầu bằng chữ hoa
  • Phương thức (action) index() sẽ được chạy mặc định
- See more at: http://hocphp.info/controller-va-urls-trong-codeigniter-framework/#sthash.CiJfo8n8.dpuf
Bạn đang đọc bài viết Controller và URLs trong CodeIgniter Framework tại Website: Học Lập Trình

0 nhận xét: