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 đó.
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;
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ã */
};
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.
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
Không có nhận xét nào:
Đăng nhận xét