में संग्रहीत उपयोगकर्ता वरीयताओं के आधार पर लोकेल सेट करें मैं वर्तमान उपयोगकर्ता की वरीयताओं के आधार पर लोकेल सेट करने की कोशिश कर रहा हूं जो डीबी में संग्रहीत हैं।symfony 2 सेट लोकेल डीबी
इसलिए हमारे उपयोगकर्ता वर्ग को एक प्राप्त किया गया हैप्रभाली भाषा जो लोकेल पहचान ('en', 'fr_FR', आदि) लौटाती है।
- "स्थानिकी" श्रोता सेवा है कि KernelEvents :: अनुरोध घटना का सदस्य बनता रजिस्टर:
मैं निम्नलिखित दृष्टिकोण पर विचार किया है।
- इस सेवा के पास सुरक्षा संदर्भ (इसके निर्माता के माध्यम से)
- इस सेवा की ऑन कर्नेलरक्वेट विधि उपयोगकर्ता को सुरक्षा संदर्भ से प्राप्त करने का प्रयास करती है, उपयोगकर्ता के पसंदीदा लोकेल को प्राप्त करती है, और इसे अनुरोध के लोकेल के रूप में सेट करती है।
दुर्भाग्यवश, यह काम नहीं करता है। जब "लोकेल" श्रोता सेवा पर onequestEvent विधि लागू की जाती है, तो सुरक्षा संदर्भ में टोकन नहीं होता है। ऐसा लगता है कि संदर्भ श्रोता को बहुत देर से (0 की प्राथमिकता के साथ) पर बुलाया जाता है, और सुरक्षा संदर्भ से पहले मेरे "लोकेल" श्रोता को चलाने के लिए असंभव है।
क्या कोई इस दृष्टिकोण को ठीक करने का तरीका जानता है, या किसी अन्य का सुझाव देता है?
मुझे अपनी समस्या के लिए एक अपूर्ण उत्तर मिला है, इसके लिए क्या योग्य है: कर्नेल इवेंट श्रोता में, मैं सत्र से सुरक्षा टोकन प्राप्त कर सकता हूं और इसे बेअसर कर सकता हूं, और इस प्रकार उपयोगकर्ता को प्राप्त कर सकता हूं। दुर्भाग्यवश, यह फ़ायरवॉल के लिए "contextKey" को जानने पर निर्भर करता है, जो कि बहुत कठिन कोड है। पूर्व में, अगर फ़ायरवॉल "मुख्य" है, तो टोकन सत्र से प्राप्त किया जा सकता है: $ टोकन = $ सत्र-> प्राप्त करें ('_ security_main'); यह तर्क ContextListener से उठाया गया है। लेकिन कॉन्फ़िगरेशन के दौरान संदर्भ श्रोता फ़ायरवॉल आईडी पारित हो जाता है। – user1447137
क्या आपने इसके बजाय security_context इंजेक्ट करने का प्रयास किया है? फिर आप संदर्भ से टोकन और उपयोगकर्ता को प्राप्त कर सकते हैं। –
पाजी, सुरक्षा संदर्भ इंजेक्शन करने से काम नहीं करता है। यह इस टिकट का पूरा बिंदु है। – user1447137