NTM Solutions

Facebook Youtube Google+

Thứ Ba, 4 tháng 12, 2018

Tự học CodeIgniter-Bài 12-Hooks – Mở rộng  lõi Framework

#hoccodeigniter


Tính năng Hooks của CodeIgniter cung cấp 01 phương tiện để chọt vào và chỉnh sửa bên trong phương thức hoạt động của framework mà không phải can thiệp các tập tin hệ thống lõi . Khi CodeIgniter chạy, nó đều tuân theo 01 quá trình nhất định, được phác đồ tại đây: user_guide/overview/appflow.html . Cũng có thể có các trường hợp riêng , tuy nhiên, nơi bạn muốn tạo hành động nào đó diễn ra tại 01 trang chỉ định trong quá trình thực hiện. Ví dụ, bạn có thể muốn chạy 01 đoạn script ngay trước khi các controllers của bạn tải xong, hoặc ngay sau khi tải xong, hoặc bạn có thể muốn đặt các đoạn scripts ở nơi nào đó.

Kích hoạt Hooks

Tính năng hooks có thể được kích hoạt/hủy kích hoạt trên phamk vi toàn cục bởi thiết lập trong mục sau tại tập tin application/config/config.php

$config['enable_hooks'] = TRUE;


Khai báo Hook

Các Hooks được khai báo trong tập tin application/config/hooks.php . Mỗi hook được xác định như 01 mảng với dạng như vầy:

$hook['pre_controller'] = array(

        'class'    => 'MyClass',

        'function' => 'Myfunction',

        'filename' => 'Myclass.php',

        'filepath' => 'hooks',

        'params'   => array('beer', 'wine', 'snacks')

);

Ghi chú:

Chỉ số mảng liên quan đến thời điểm hook mà bạn muốn dùng.

Trong ví dụ trên thời điểm hook là pre_controller.

Danh sách các thời điểm hook được ghi rõ ở cuối bài viết .

Các mục sau phải được khai báo trong mảng hook liên quan của bạn:

·         class ->tên lớp bạn muốn gọi. Nếu bạn thích dùng 01 hàm thủ tục hơn thay vì 01 lớp thì cứ bỏ trống mục này.

·         function ->tên hàm (hoặc phương thức) bạn muốn gọi.

·         filename ->tên tập tin chứa lớp/hàm của bạn.

·         filepath ->tên thư mục chứa đoạn script của bạn.

Chú ý: script của bạn phải đặt trong 01 thư mục BÊN TRONG thư mục application/ , vì vậy đường dẫn tập tin liên quan đến thư mục đó. Ví dụ, nếu script của bạn đặt tại thư mục application/hooks/, đường dẫn filepath sẽ đơn giản chỉ là ‘hooks’. Nếu script của bạn đặt tại thư mục application/hooks/utilities/ đường dẫn filepath sẽ là ‘hooks/utilities’. Không có dấu sổ / ở cuối.

·         params bất kỳ tham số nào bạn muốn truyền vào script. Mục này là 01 tùy chọn.

Bạn cũng có thể dùng các hàm lambda/vô danh (hoặc hàm đóng) như là các hooks, với 01 cú pháp đơn giản sau:

$hook['post_controller'] = function()

{

        /* đoạn mã */

};

Gọi nhiều lần 01 Hook

Nếu muốn dùng cùng 01 điểm hook với nhiều script, đơn giản bạn chỉ khai báo mảng đa chiều như sau:

$hook['pre_controller'][] = array(

        'class'    => 'MyClass',

        'function' => 'MyMethod',

        'filename' => 'Myclass.php',

        'filepath' => 'hooks',

        'params'   => array('beer', 'wine', 'snacks')

);



$hook['pre_controller'][] = array(

        'class'    => 'MyOtherClass',

        'function' => 'MyOtherMethod',

        'filename' => 'Myotherclass.php',

        'filepath' => 'hooks',

        'params'   => array('red', 'yellow', 'blue')

);

Chú ý cặp dấu ngoặc [] sau mỗi chỉ số mảng:

$hook['pre_controller'][]

Điều này cho phép bạn dùng điểm hook với nhiều scripts. Thứ tự của mảng khi khai báo sẽ là thứ tự thực hiện.

Các điểm Hook

Sau đây là danh sách các điểm hook có sẵn.

·         pre_system gọi rất sớm trong suốt quá trình thực thi hệ thống. Chỉ benchmark và lớp các hooks được tải tại thời điểm này. Không định tuyến hoặc các tiến trình khác xảy ra.

·         pre_controller gọi trước ngay lập tức khi bất kỳ controllers của bạn được gọi. Tất cả các lớp cơ sở, định tuyến, và các kiểm tra bảo mật được thực hiện.

·         post_controller_constructor gọi lập tức sau khi controller của bạn được khởi tạo, nhưng trước bất kỳ lệnh gọi phương thức nào xảy ra.

·         post_controller gọi ngay sau controller của bạn thực thi đầy đủ.

·         display_override thực thi chồng phương thức _display() , dùng để gửi trang sau cùng đến trình duyệt web web vào thời điểm cuối quá trình thực thi hệ thống. Điều này cho phép bạn dùng phương pháp hiển thị riêng của bạn. Chú ý rằng bạn sẽ cần tham khảo đến siêu đối tượng CI với cú pháp: $this->CI =& get_instance() và sau đó dữ liệu kết quả sẽ sẵn sàng bằng cách gọi: $this->CI->output->get_output().

·         cache_override kích hoạt tính năng cho phép bạn gọi phương thức riêng thay vì phương thức _display_cache() trong  Thư viện Output . Điều này cũng cho phép bạn dùng cơ chế hiển thị cache của riêng mình.

·         post_system gọi sau khi trang hiển thị sau cùng được gửi đến trình duyệt, cuối quá trình thực thi hệ thống sau khi dữ liệu sau cùng được gửi đến trình duyệt.

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