2010-02-04 32 views
10

Tôi đang cố gắng tải trình trợ giúp cookie trong hook pre_controller của tôi cho một chức năng 'nhớ tôi' trên trang web của chúng tôi. Tôi nghĩ rằng việc tạo một thể hiện của đối tượng CI với $ ci = & get_instance(); sẽ cho phép tôi truy cập để tải người giúp đỡ nhưng đây không phải là trường hợp.CodeIgniter: Hooks (pre_controller) đang tải những người giúp đỡ

Suy nghĩ?

$ci =& get_instance(); 
$ci->load->helper('cookie'); 
// does not load 

Trả lời

12

Các pre_controller móc thực hiện trước khi các đối tượng siêu đã được xây dựng hoàn chỉnh, vì vậy get_instance() không thể làm việc - đối tượng tĩnh nó sẽ trả về một tham chiếu đến vẫn chưa được khởi tạo.

Cân nhắc sử dụng móc post_controller_constructor thay thế; bộ khởi tạo của trình điều khiển của bạn sẽ được thực hiện và đối tượng siêu CI sẽ có sẵn để sử dụng.

14

Vấn đề với post_controller_constructor là nó chạy sau khi hàm tạo (vui vẻ đủ) và nếu bạn sử dụng trình xây dựng bộ điều khiển cho nhiều điều, điều này có thể là một vấn đề.

Nếu nó không phải là một vấn đề cho bạn (helper của bạn sẽ không ảnh hưởng đến bất cứ điều gì chạy hoặc nạp trong các nhà thầu của bạn) đủ công bằng, nếu nó là một vấn đề bạn có hai giải pháp.

  1. Thay vì móc đặt mã của bạn trong MY_Controller
  2. Tạo MY_Controller và thêm vào một điểm móc tùy chỉnh.

    class MY_Controller extends Controller 
    { 
    
        function MY_Controller() 
        { 
         parent::Controller(); 
         $GLOBALS['EXT']->_call_hook('pre_controller_constructor'); 
        } 
    } 
    

Lưu ý rằng nếu bạn đang sử dụng CodeIgniter 3.0 hoặc mới hơn, chức năng _call_hook được đổi tên thành call_hook.

Các vấn đề liên quan