2011-08-17 12 views
5

मैं अपने नियंत्रक में उपयोग के लिए "रेफरर" ऑब्जेक्ट खोजने के लिए कोई भाग्य नहीं ले रहा हूं। मुझे उम्मीद है कि ऑब्जेक्ट के समान ऑब्जेक्ट होगा जिसमें _controller, _route और तर्क निर्दिष्ट पैरामीटर होंगे।Symfony2: रेफरर ऑब्जेक्ट अनुरोध ऑब्जेक्ट के समान है?

मुझे क्या करना कोशिश कर रहा हूँ एक भाषा स्विचर कार्रवाई कि पुनर्निर्देश नई भाषा में एक ही पृष्ठ पर उपयोगकर्ता है। की पंक्तियों के साथ कुछ:

public function switchLangAction($_locale) 
{ 
    $args = array(); 
    $newLang = ($_locale == 'en') ? 'fr' : 'en'; 

    // this is how I would have hoped to get a reference to the referrer request. 
    $referrer = $this->get('referrer'); 
    $referrerRoute = $referrer->parameters->get('_route'); 
    $args = $referrer->parameters->get('args'); // not sure how to get the route args out of the params either! 
    $args['_locale'] = $newLang; 

    $response = new RedirectResponse($this->generateUrl(
     $referrerRoute, 
     $args 
    )); 

    return $response; 
} 

यह भी संभव है एक और तरीका यह करने के लिए है कि वहाँ - मुझे पता है रेल में है वहाँ "redirect_to: वापस" उदाहरण के लिए विधि।

किसी भी मदद की सराहना की जाएगी।

उत्तर

4

उपयोगकर्ता के सत्र में लोकेल क्यों नहीं बदल रहा है?

सबसे पहले, फिर रूटर

my_login_route: 
    pattern: /lang/{_locale} 
    defaults: { _controller: AcmeDemoBundle:Locale:changeLang } 
    requirements: 
     _locale: ^en|fr$ 

में अपने स्थानों को परिभाषित,

$session->set('referrer', $request->getRequestUri()); 
फोन करके सत्र

namespace Acme\DemoBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class LocaleController extends Controller 
{ 
    public function switchLangAction($_locale, Request $request) 
    { 
     $session = $request->getSession(); 
     $session->setLocale($_locale); 
     // ... some other possible actions 

     return $this->redirect($session->get('referrer')); 
    } 
} 

अन्य सभी नियंत्रकों आप सत्र चर खुद तय करना चाहिए में सेट

आप प्रत्येक पी के लिए सत्र चर सेट करने के लिए शायद एक ईवेंट श्रोता भी बना सकते हैं उम्र स्वचालित रूप से।

+0

ठीक है, धन्यवाद, gilden! –

+0

मैंने इस पोस्ट को लिखने के बाद सिम्फनी 2 के बारे में कुछ और सीखा है। एक बेहतर कार्यान्वयन [यहां] पाया जा सकता है (http://stackoverflow.com/questions/7414243/symfony2-help-please-with-backward-uri-referrer-during-switching-locale/7423276#7423276)। – gilden

0

यह मेरी नियंत्रक

वर्ग LocaleController फैली नियंत्रक {

public function indexAction() 
{ 
    if(null === $this->getRequest()->getLocale()){ 
     $locale = $this->getRequest()->getPreferredLanguage($this->getLocales()); 
     $this->getRequest()->setLocale($locale); 
    } 
    else{ 
     $locale = $this->getRequest()->getLocale(); 
    } 

    return $this->redirect($this->generateUrl('corebundle_main_index', array('_locale' => $locale))); 
} 

public function changeLocaleAction($_locale) 
{ 
    $request = $this->getRequest(); 
    $referer = $request->headers->get('referer'); 
    $locales = implode('|',$this->getLocales()); 
    $url = preg_replace('/\/('.$locales.')\//', '/'.$_locale.'/', $referer, 1); 
    return $this->redirect($url); 
} 

private function getLocales() 
{ 
    return array('ru', 'uk', 'en'); 
} 


/** 
* @Template() 
*/ 
public function changeLocaleTemplateAction() 
{ 
    return array(); 
} 

} है

संबंधित मुद्दे