2012-10-16 7 views
26

मेरे पास कोई संकेत नहीं है कि उपयोगकर्ता को रीडायरेक्ट करने के लिए कर्नेल इवेंट श्रोता सेटअप (kernel.controller) है। इवेंट श्रोता को सफलतापूर्वक बुलाया जा रहा है, हालांकि मुझे रीडायरेक्ट करने के तरीके को समझने में परेशानी हो रही है। यहाँ मैं क्या मिला है:घटना श्रोता के लिए Symfony2 रीडायरेक्ट?

$cont = $event->getController('testpost'); 
$event->setResponse($cont); 

कौन सा मुझे त्रुटि देता है:

Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse() 

उत्तर

41

आप एक FilterControllerEvent वस्तु के लिए एक प्रतिक्रिया निर्धारित नहीं कर सकते।

$route = 'route_name'; 

if ($route === $event->getRequest()->get('_route')) { 
    return; 
} 

$url = $this->router->generate($route); 
$response = new RedirectResponse($url); 
$event->setResponse($response); 
+0

ओह दिलचस्प। मैं अभी भी 'अपरिभाषित विधि सेट रेस्पॉन्स' पर कॉल कर रहा हूं, क्या कोई कक्षा/फ़ाइल है जिसमें मुझे शामिल होना चाहिए? –

+0

क्या आपने पैरामीटर प्रकार को 'GetResponseEvent' में बदल दिया है? और क्या आप पूरी तरह से 'kernel.request' के लिए सुनो? कृपया इसे दोबारा जांचें। –

+0

ठीक है, मैं kernal.controller पर था, इसलिए मैंने इसे kernal.request को स्विच किया और यह त्रुटि के साथ रीडायरेक्ट करता है 'त्रुटि अपवाद: पकड़ने योग्य घातक त्रुटि: तर्क 1 को पास किया गया ... सिम्फनी \ घटक \ Http कर्नेल \ Event \ FilterControllerEvent, Symfony \ Component \ HttpKernel \ Event \ GetResponseEvent' –

1

यहाँ कर (लगभग) एक ही बात के बारे में एक ऐसी ही सवाल यह है: आप क्योंकि इसके GetResponseEvent वस्तु setResponse() विधि है kernel.request घटना के लिए सुनने की जरूरत है। यह आपको एक सुराग देना चाहिए।

Symfony 2 - redirect if the user is logged in

आशा है कि यह मदद करता है।

4

अधिक अयस्क 'kernel.controller' पर रीडायरेक्ट करने के लिए कम स्पष्ट रास्ता घटना

public function onKernelController(FilterControllerEvent $event) 
{ 
    /* @var $controller \Symfony\Bundle\FrameworkBundle\Controller\Controller */ 
    $controller = $event->getController()[0]; // PHP 5.4 or $controller = $controller[0]; 

    throw new HttpException(307, null, null, array('Location' => $controller->generateUrl('homepage'))); 
} 
+0

यह प्रोड एनवी symfony2.1 के लिए काम नहीं कर रहा है। -1। – NHG

81

आप FilterControllerEvent रीडायरेक्ट करना चाहते हैं, तो आप का उपयोग करना चाहिए यह एक:

public function onKernelController(FilterControllerEvent $event) 
{ 
    // do something 
    $event->setController(function() use ($redirectUrl) { 
     return new RedirectResponse($redirectUrl); 
    }); 
} 
+0

यह वही था जो मैं खोज रहा था, धन्यवाद! मुझे कुछ स्थितियों के तहत पुनर्निर्देशित करने की आवश्यकता थी, जिसमें से एक था जब एक विशेष नियंत्रक मार्गांतरित किया गया था। ऑन कर्नेलरक्वेट इवेंट को वास्तव में नियंत्रक को रूट करने से पहले बुलाया गया था, इसलिए मैं वहां तर्क नहीं डाल सका। – Bryson

+0

चालाक युक्तियाँ! धन्यवाद। – Damien

+0

यह सिर्फ मेरे जीवन को बचाया – RedactedProfile

-5

यह कोई तरीका नहीं है जाने के लिए, मेरे दोस्त। आपको अपने लिए कवर करने के लिए एक डिफ़ॉल्ट सिम्फनी सुरक्षा का उपयोग करना चाहिए ...

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