NTM Solutions

Facebook Youtube Google+

Thứ Hai, 3 tháng 12, 2018

Tự học CodeIgniter-Bài 11-Tạo lớp Phụ Trợ

#hoccodeigniter


Trong 01 vài trường hợp bạn muốn phát triển các lớp tồn tại độc lập với các controllers của bạn nhưng có khả năng sử dụng tất cả tài nguyên của CodeIgniter. Rồi bạn sẽ thấy điều này sẽ thực hiện rất là dễ.
get_instance()

get_instance()

Giá trị trả về: tham khảo tùy từng controller

Kiểu trả về: CI_Controller

Bất kỳ lớp nào được khởi tạo bên trong các phương thức của bạn đều có thể truy cập các tài nguyên có sẵn của CodeIgniter 01 cách đơn giản bằng cách dùng hàm get_instance() . Hàm này trả về đối tượng chính của CodeIgniter.
Thông thường, để gọi bất kỳ phương thức có sẵn, CodeIgniter buộc bạn phải dùng cấu trúc lệnh $this như vầy:
$this->load->helper('url');

$this->load->library('session');

$this->config->item('base_url');

// v.v.


$this, tuy vậy chỉ làm việc bên trong controllers , models, hoặc views của bạn. Nếu bạn muốn dùng các lớp CodeIgniter từ bên trong các lớp riêng của bạn thì làm như sau:
Đầu tiên, gán đối tượng CodeIgniter vào 01 biến:
$CI =& get_instance();

Một khi bạn gán đối tượng vào 01 biến, bạn sẽ dùng biến đó thay vì  $this:
$CI =& get_instance();

$CI->load->helper('url');

$CI->load->library('session');

$CI->config->item('base_url');

// v.v.

Nếu bạn đang dùng hàm get_instance() bên trong lớp khác, bạn nên gán nó vào thuộc tính. Bằng cách này, bạn sẽ không cần phải gọi get_instance() trong mỗi phương thức riêng lẻ.
Ví dụ:
class Vidu {
        protected $CI;

        // Ta dùng 01 hàm khởi tạo, bởi vì bạn không thể gọi trực tiếp 01 hàm từ 01 thuộc tính.

        public function __construct()

        {
                // Gán siêu đối tượng CodeIgniter

                $this->CI =& get_instance();
        }


        public function foo()

        {
                $this->CI->load->helper('url');
                redirect();
        }

        public function bar()

        {
                $this->CI->config->item('base_url');
        }
}

Trong ví dụ trên , cả 02 phương thức foo()bar() sẽ làm việc sau khi bạn khởi tạo lớp Ví dụ, mà không cần gọi hàm get_instance() trong mỗi phương thức.
Nếu vẫn chưa rõ các bạn xem thêm video clip sau:


By #tiensim

Nguồn: User Guide – General Topics