2010-02-04 24 views
10

Estoy intentando cargar el cookie helper en mi gancho pre_controller para una función 'recordarme' en nuestro sitio. Pensé que crear una instancia del objeto de CI con $ ci = & get_instance(); me permitiría acceder a la carga de ayudantes, pero este no es el caso.CodeIgniter: Hooks (pre_controller) cargando helpers

¿Pensamientos?

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

Respuesta

12

El pre_controller gancho ejecuta antes de que el objeto súper ha sido completamente construido, por lo get_instance() no puede trabajar - el objeto estático que devuelve una referencia a todavía no se ha inicializado.

Considere utilizar el gancho post_controller_constructor; el constructor de su controlador se habrá ejecutado, y el super objeto de CI estará disponible para su uso.

14

El problema con el post_controller_constructor es que se ejecuta después del constructor (curiosamente) y si usas los constructores del Controlador para muchas cosas, esto puede ser un problema.

Si no es un problema para usted (su ayudante no afectará a nada ejecutado o cargado en sus constructores) es suficiente, si es un problema, tiene dos soluciones.

  1. En lugar de poner el gancho en su código MY_Controller
  2. Crear MY_Controller y añadir en un punto de conexión personalizada.

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

Tenga en cuenta que si usted está utilizando CodeIgniter 3.0 o posterior, la función _call_hook se renombró a call_hook.