Yii

2011-09-14 18 views
8

में ईवेंट का उपयोग कैसे करें IBeginRequest ईवेंट में कुछ कोड चलाने के लिए चाहते हैं।
मैं यह कहां करूं? मुझे लगता है कि मुझे कोर लाइब्रेरी कोड में इसे जोड़ने का अनुमान नहीं है।
मैं वाईआईYii

उत्तर

15

आप onBeginRequest उपयोग करने के लिए और onEndRequest आप यह कर सकते अपने कॉन्फ़िग फ़ाइल में अगले लाइनों को जोड़कर चाहते हैं:

return array (
... 
'onBeginRequest'=>array('Y', 'getStats'), 
'onEndRequest'=>array('Y', 'writeStats'), 
... 
) 

या आप कर सकते हैं यह इनलाइन

Yii::app()->onBeginRequest= array('Y', 'getStats'); 
Yii::app()->onEndRequest= array('Y', 'writeStats'); 

जहां Y एक क्लासनाम है और getStats और writeStats इस कक्षा के तरीके हैं। अब कल्पना आप एक वर्ग Y इस तरह की घोषणा की है:

class Y { 
    public function getStats ($event) { 
     // Here you put all needed code to start stats collection 
    } 
    public function writeStats ($event) { 
     // Here you put all needed code to save collected stats 
    } 
} 
हर अनुरोध दोनों तरीकों स्वचालित रूप से चलेंगे पर

तो। बेशक आप सोच सकते हैं "क्यों नहीं BeginRequest विधि पर अधिभार?" लेकिन सभी घटनाओं में से पहले आप कुछ बार दोहराए गए कोड को चलाने के लिए कक्षा का विस्तार नहीं कर सकते हैं और वे आपको विभिन्न स्थानों पर घोषित विभिन्न वर्गों के विभिन्न तरीकों को निष्पादित करने की अनुमति भी देते हैं। तो आप पिछले ईवेंट हैंडलर्स के साथ अपने आवेदन के किसी अन्य भाग में

Yii::app()->onEndRequest= array('YClass', 'someMethod'); 

जोड़ सकते हैं और आप अनुरोध प्रसंस्करण के बाद Y->writeStats और YClass->someMethod दोनों को चलाने के मिल जाएगा। व्यवहार के साथ यह आपको स्रोत कोड को बदलने और Yii के बेस क्लास के विस्तार किए बिना लगभग किसी भी जटिलता के विस्तार घटकों को बनाने की अनुमति देता है।

+0

तो अगर मैं कॉन्फ़िगरेशन फ़ाइल पर जोड़ूं तो प्रोजेक्ट स्ट्रक्चर में क्लास लाइव रहें? – RicardoE

1

में पूरी तरह से नोब हूं, मुझे विश्वास है कि आप किसी भी आउटपुट शुरू होने से पहले अपनी फाइलों में कहीं भी कहीं भी ऐसा कर सकते हैं, इसलिए इसे एक नियंत्रक, दृश्य या कस्टम क्लास में काम करना चाहिए, आमतौर पर "संरक्षित" "एक वाईआई वेब ऐप में फ़ोल्डर। एफवाईआई, वे फ़ाइलें कोर फाइल नहीं हैं और वाईआई फ्रेमवर्क फाइलों के लिए अपील की गई (लगभग) स्वतंत्र रूप से संपादित की जा सकती हैं (जैसा कि बूटस्ट्रैप index.php फ़ाइल में "$ yii" var द्वारा संदर्भित है)।

कार्यों देखो की तरह:

Yii::app()->onbeginRequest = create_function('$event', 'return function_name_a();'); 
Yii::app()->onendRequest = create_function('$event', 'return function_name_b();'); 
+3

कि एक eval की तरह बदबू आ रही है ... –

+0

आपसे पूछा यह कैसे किया गया था ... – ldg

+0

आप कर सकते हैं 'Yii :: एप्लिकेशन() -> onendRequest = function() {// somthing कर};' –