मंगलवार, 23 फ़रवरी 2010

हुक्स : फ़्रेमवर्क के क्रोड़ को विस्तारित करना – कोड इग्नाइटर

कोड इग्नाइटर के हुक्स के द्वारा आप कोड इग्नाइटर के क्रोड को बिना छुये उसमें बदलाव ला सकते हैं. जब कोड इग्नाइटर चलता है तब यह एक विशेष एक्जिक्यूशन प्रक्रिया का पालन करता है. इस प्रक्रिया को एप्लिकेशन फ़्लो पेज में दर्शाया गया है. कई उदाहरण हो सकते हैं जैसे कि किसी विशेष चरण में जैसे किसी कंट्रोलर के लोड होने के ठीक पहले या ठीक बाद में आप किसी कार्य को शुरू करना चाहते हैं.

हुक्स को सक्षम करना

हुक्स सुविधा को 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
    यह उस वक्त पुकारा जाता है जब आपका पेज पूरी तरह से रेंडर होकर आपके ब्राउजर को भेज दिया जाता है.

कोई टिप्पणी नहीं:

एक टिप्पणी भेजें

इस ब्लाग में प्रकाशित सामग्री कापीराईट द्वारा सुरक्षित है. बिना अनुमति इसका किसी भी प्रकार से अन्यत्र प्रयोग/प्रकाशन मूल रूप में/बदल कर उपयोग नही किया जा सकता है.

हिंदी में तकनीकी लेखन को प्रोत्साहित करें

please donate अभी तक वेब डेवलपमेंट अथवा प्रोग्रामिंग आदि से संबंधित जानकारी पर अंग्रेजी का एकाधिकार रहा है. भारत में इतने आई टी गुरू होने के बावजूद भारतीय भाषाओं में इस विषय पर लेखन नगण्य है. इस ब्लाग के माध्यम से मैं हिन्दी भाषिओं तक वेब डेवलपमेंट का ज्ञान पहुंचाने की कोशिश कर रहा हूं. अत: आप सभी से अनुरोध है कि हिंदी में तकनीकी लेखन के लिये सहयोग करें
मैं वेबसाइटें भी बनाता हूं. यदि आपको बनवानी हो तो बताएं.

ARCHIVES

इस ब्लॉग में खोजें

फ़ॉलोअर