2010-02-04 5 views
10

Je suis en train de charger l'aide cookie dans mon crochet pre_controller pour une fonction «se souvenir de moi» sur notre site. J'ai pensé que créer une instance de l'objet CI avec $ ci = & get_instance(); me permettrait d'accéder aux helpers de chargement mais ce n'est pas le cas.CodeIgniter: Hooks (pre_controller) chargement helpers

Pensées?

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

Répondre

12

Le crochet pre_controller exécute avant que l'objet super a été entièrement construit, donc get_instance() ne peut pas travailler - l'objet statique, il renvoie une référence à n'a pas encore été initialisé.

Envisagez d'utiliser le crochet post_controller_constructor à la place; Le constructeur de votre contrôleur aura exécuté, et le super objet CI sera disponible pour utilisation.

14

Le problème avec le post_controller_constructor est qu'il fonctionne après le constructeur (curieusement) et si vous utilisez des constructeurs de contrôleurs pour beaucoup de choses, cela peut être un problème.

Si ce n'est pas un problème pour vous (votre assistant n'affectera pas n'importe quoi exécuté ou chargé dans vos constructeurs) assez juste, si c'est un problème, vous avez deux solutions.

  1. Au lieu du crochet mettre votre code dans MY_Controller
  2. Créer MY_Controller et ajouter dans un point de crochet personnalisé.

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

Notez que si vous utilisez 3.0 CodeIgniter ou plus tard, la fonction _call_hook a été renommé call_hook.

Questions connexes