कोड इग्नाइटर के हुक्स के द्वारा आप कोड इग्नाइटर के क्रोड को बिना छुये उसमें बदलाव ला सकते हैं. जब कोड इग्नाइटर चलता है तब यह एक विशेष एक्जिक्यूशन प्रक्रिया का पालन करता है. इस प्रक्रिया को एप्लिकेशन फ़्लो पेज में दर्शाया गया है. कई उदाहरण हो सकते हैं जैसे कि किसी विशेष चरण में जैसे किसी कंट्रोलर के लोड होने के ठीक पहले या ठीक बाद में आप किसी कार्य को शुरू करना चाहते हैं.
हुक्स को सक्षम करना
हुक्स सुविधा को application/config/config.php फ़ाइल से केवल निम्न लिखित लाइन को बदल कर पूरे अनुप्रयोग में सक्षम या अक्षम किया जा सकता है:
$config['enable_hooks'] = TRUE;
किसी हुक को परिभाषित करना
हुक्स को application/config/hooks.php फ़ाइल में परिभाषित किया जाता है. प्रत्येक हुक को एक एरे के तौर पर कुछ इस प्रकार लिखा जा सकता है:
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
नोट्स:
एरे की इंडेक्स हमेंशा विशेष हुक के बिंदु से सहसंबद्ध होती है. ऊपर के उदाहरण में हुक का बिंदु pre_controller है. हुक के बिंदुओं की सूची नीचे दी गई है. आपकी एसोसिएटिव एरे में निम्नलिखित चीजें परिभाषित होनी चाहिए:
- class उस क्लास का नाम जिसका आप आह्वान करना चाहते हैं. यदि आप क्लास की बजाय किसी प्रक्रियात्मक फ़ंग्शन को उपयोग करना चाहते हैं तो इसे खाली ही छोड़ दें.
- function उस फ़ंग्शन का नाम जिसे आप पुकारना चाहते हैं.
- filename उस फ़ाइल का नाम जिसमें आपकी क्लास/फ़ंग्शन हैं.
- filepath उस डायरेक्ट्री का नाम जहां आपकी स्क्रिप्ट रखी हुई है.
नोट: आपकी स्क्रिप्ट application फ़ोल्डर के अंदर की किसी डायरेक्ट्री के भीतर होनी चाहिये. उदाहरण के लिये, यदि आपकी स्क्रिप्ट application/hooks फ़ोल्डर में है, तो आप फ़ाइल पाथ के तौर पर hooks शब्द का प्रयोग करेंगे. यदि आपकी स्क्रिप्ट application/hooks/utilities फ़ोल्डर में है तो आप hooks/utilities को अपने फ़ाइल पाथ के तौर पर प्रयोग करेंगे. - params कोई ऐसा पैरामीटर जिसे आप अपनी स्क्रिप्ट से गुजारना चाहें. यह वैकल्पिक है.
एक ही हुक को कई बार पुकारना
यदि आप एक ही हुक बिंदु का का प्रयोग एक से अधिक स्क्रिप्टों में करना चाहते हैं तो अपने एरे को बहु आयामी बनायें जैसे कि ये:
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
$hook['pre_controller'][] = array(
'class' => 'MyOtherClass',
'function' => 'MyOtherfunction',
'filename' => 'Myotherclass.php',
'filepath' => 'hooks',
'params' => array('red', 'yellow', 'blue')
);
हर एरे इंडेक्स के आगे लगे हुये बड़े कोष्ठकों में ध्यान दीजियेगा:
$hook['pre_controller'][]
इसके प्रयोग से आपको एक ही हुक का बिंदु मिलेगा जो कि एक से अधिक स्क्रिप्टों के साथ होगा. आप जिस क्रम से एरे परिभाषित करते हैं उसी क्रम से उनका क्रियान्वयन भी होता है.
हुक बिंदु
हुकों के बिंदुओं की सूची इस प्रकार है:
- pre_system
इसे तंत्र के क्रियान्वयन के एकदम शुरू में पुकारा जाता है. इस चरण में केवल बेन्चमार्क तथा हुक क्लासें ही लोड हुई होती हैं. कोई राउटिंग या अन्य क्रिया शुरू नही होती है. - pre_controller
इसे आपके कंट्रोलरों के पुकारे जाने के ठीक बाद पुकारा जाता है. सभी आधारभूत क्लासें, राउटिंग तथा सुरक्षा जांच हो चुकी होती हैं. - post_controller_constructor
इसे आपके कंट्रोलर के शुरू होने के बाद परंतु किसी मेथड की पुकार के पहले पुकारा जाता है. - post_controller
आपके कंट्रोलर के पूरे क्रियान्वयन के ठीक बाद इसे पुकारा जाता है. - display_override
यह _display() फ़ंग्शन का उल्लंघन करता है. _display() फ़ंग्शन तंत्र के पूरी तरह क्रियान्वित होने के पश्चात अंत में ब्राउजर में पेज भेजने का कार्य करता है. यह आपको अपनी डिस्प्ले कार्यपद्धति उपयोग करने की भी सुविधा प्रदान करता है.
कृपया नोट कीजिये कि आपको $this->CI =& get_instance() कोड इग्नाइटर सुपर आब्जेक्ट के साथ संदर्भित करने की जरूरत होगी. और तब आखिरी डाटा $this->CI->output->get_output() फ़ंग्शन को पुकारने पर उपलब्ध होगा. - cache_override
यह आपको _display_cache() फ़ंग्शन की बजाय अपने स्वयं के फ़ंग्शनों को उपयोग करने की सुविधा प्रदान करता है. यह आपको अपने स्वयं के कैश तंत्र को उपयोग करने की सुविधा प्रदान करता है. - scaffolding_override
यह आपको स्कैफ़ोल्डिंग अनुरोधों का उल्लंघन करके अपनी स्क्रिप्टों का उपयोग करने की अनुमति प्रदान करता है. - post_system
यह उस वक्त पुकारा जाता है जब आपका पेज पूरी तरह से रेंडर होकर आपके ब्राउजर को भेज दिया जाता है.
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें