2011-10-26 16 views
10

के लिए सिम्फनी 2 भाषा मैं सिम्फनी 2 में नया हूं और मैं अपने मेजबाननाम के टीएलडी के साथ भाषा चुनने की तलाश में हूं। (उचित तरीके से)टीएमडी

मैं पहले से ही किसी तरह एक फार्म के साथ भाषा बदलने के लिए लगता है:

    : http://symfony.com/blog/play-with-the-user-language

    लेकिन मैं जब एक नया उपयोगकर्ता के साथ कनेक्ट भाषा का चयन करने में सक्षम होना चाहिए

  • www.hostname.fr => fr
  • www.hostname.it => यह
  • www.hostname.co.uk => एन

अभी के लिए मैं एक सेवा श्रोता कि प्रत्येक अनुरोध के लिए गति प्रदान जोड़ें:

services: 
    kernel.listener.domain_langue_listener: 
     class: acme\DemoBundle\Listener\DomainLangueListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } 

वर्ग के साथ:

namespace acme\DemoBundle\Listener; 
class DomainLangueListener 
{ 
    public function onDomainParse(Event $event) 
    { 
     $request = $event->getRequest(); 
     $session = $request->getSession(); 

     preg_match('/[^.]+$/', $request->getHost(), $match); 
     $session->setLocale($match[0]); 
    } 
} 

यह श्रोता काम करता है, लेकिन मैं के साथ जो टीएलडी मैच परिभाषित करने के लिए कुछ पैरामीटर का उपयोग करना चाहेंगे जो भाषा, लेकिन श्रोता में मुझे लगता है कि जैसे कंटेनर के लिए उपयोग नहीं कर सकते:

$this->container->getParameter('tld_allowed'); 

मैं जानना चाहूंगा अगर वहाँ पहुँच के लिए एक और तरीका है श्रोता में पैरामीटर्स या होस्टनाम

के साथ किसी भाषा का चयन करने का एक अन्य तरीका आपके उत्तरों के लिए धन्यवाद।

उत्तर

7

आप लगभग वहां हैं। केवल एक चीज जो आपको करना है वह "तर्क" (कन्स्ट्रक्टर के लिए तर्क) का उपयोग करके पैरामीटर को आपके श्रोता में इंजेक्ट करना है। %foobar% "foobar" पैरामीटर को संदर्भित करता है, @foobar "foobar" सेवा को संदर्भित करता है।

parameters: 
    tld_allowed: en,fr,de 

services: 
    kernel.listener.domain_langue_listener: 
     class: acme\DemoBundle\Listener\DomainLangueListener 
     arguments: 
      - %tld_allowed% 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } 

और श्रोता:

namespace acme\DemoBundle\Listener; 
class DomainLangueListener 
{ 
    public function __construct($tldAllowed) 
    { 
     $this->tldAllowed = $tldAllowed; 
    } 

    ... 
}