जैसा कि @ एआरएमएस ने मुझे सुझाव दिया है, मैंने सिम्फनी 2 की घटना तंत्र की खोज शुरू कर दी है। तो अब मैं कोड लिखने वाला हूं, जिसने मेरी समस्या हल की है (सभी कॉन्फ़िगरेशन मैं वाईएएमएल में कर रहा हूं, लेकिन आप कर सकते हैं इसे एक्सएमएल या PHP में भी करें)।
सबसे पहले आपको सिम्फनी कॉन्फ़िगरेशन में वर्णन करने की आवश्यकता है कि आप किस तरह की घटना सुनना चाहेंगे और घटना होने पर कर्नेल को क्या कॉल करना चाहिए। इस खुले विन्यास फाइल अनुप्रयोग के लिए \ config \ config.yml और निम्न कोड जोड़ें:
services:
younamespace.yourbundle.listener.preexecute:
class: Location\Of\Your\Listener\Class
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
आपका वर्ग निम्नलिखित तरीके से onKernelController विधि को लागू करना चाहिए:
public function onKernelController(FilterControllerEvent $event) {
if(HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$controllers = $event->getController();
if(is_array($controllers)) {
$controller = $controllers[0];
if(is_object($controller) && method_exists($controller, 'preExecute')) {
$controller->preExecute();
}
}
}
}
इस हर के बाद समय जब आप अपने नियंत्रक में प्रीएक्सक्यूट विधि बनाते हैं, तो इसे किसी भी क्रिया को निष्पादित करने से पहले बुलाया जाएगा, ताकि आप उस विधि में बहुत सी चीजें कर सकें, जैसे वैरिएबल प्रारंभ करना, या डीबी को लिखने से पहले कुछ चेक और इसी तरह।
तुम भी (इस उदाहरण kernel.request घटना के लिए है, लेकिन यह आप को समझने में मदद कर सकते हैं)
मज़े विवरण here में विन्यास देख सकते हैं;)
धन्यवाद एक बहुत अपने सुझाव के लिए यह, मुझे बहुत मदद की। – haynar