2013-03-27 2 views
6

से रूट नाम प्राप्त करें ठीक है आप app.request.attributes.get('_route') के साथ वर्तमान मार्ग का नाम प्राप्त कर सकते हैं लेकिन यूआरएल से प्राप्त करना संभव नहीं है?Symfony2 यूआरएल

कुछ app.request.attributes.get('/about') की तरह कुछ?

उत्तर

15

आप इस के लिए Router वर्ग/सेवा का उपयोग कर सकते हैं:

public function indexAction() 
{ 
    $router = $this->get('router'); 
    $route = $router->match('/foo')['_route']; 
} 
the documentation में

अधिक जानकारी

+0

यह काम THX है जैसे काम का उपयोग कर तरीकों से मेल खाते के साथ MethodNotAllowed हो रही थी: =) – altore

+0

मैं इस प्रयोग किया जाता है, लेकिन यह वैध नहीं है। सिम्फनी में रूट सेवा में वर्तमान अनुरोध की स्थिति है। वास्तविक मार्ग प्राप्त करने के लिए आपको HTTP विधि के अनुरोध से बनाए गए संदर्भ को सेट करना चाहिए जो पोस्ट, पैच या पुट या कोई अन्य हो सकता है। –

7

मैं हाल ही में पता चला कि मैच() विधि करने के लिए वर्तमान अनुरोध के HTTP विधि का उपयोग करता अनुरोध से मेल खाते हैं। इसलिए यदि आप उदाहरण के लिए PUT अनुरोध कर रहे हैं, तो यह आपके द्वारा PUT विधि के साथ दिए गए यूआरएल से मेल खाने का प्रयास करेगा, जिसके परिणामस्वरूप MethodNotAllowedException अपवाद (उदाहरण के लिए, रेफरर प्राप्त करना)।

इससे बचने के लिए मैं इस समाधान का उपयोग कर रहा हूँ:

// set context with GET method of the previous ajax call 
$context = $this->get('router')->getContext(); 
$currentMethod = $context->getMethod(); 
$context->setMethod('GET'); 

// match route 
$routeParams = $this->get('router')->match($routePath); 

// set back original http method 
$context->setMethod($currentMethod); 

लेकिन यह सच नहीं हो सकता है कि वह हमेशा GET अनुरोध है। यह आपके मामले में एक POST अनुरोध हो सकता है।

मैंने इस समस्या को सिम्फनी समुदाय में भेज दिया है। चलो देखते हैं कि वे क्या प्रस्तावित करते हैं।

+0

आप 'प्राप्त करें' के बजाय 'HEAD' विधि को मजबूर कर सकते हैं। यदि आप अपनी कैश फ़ाइलों में 'appDevUrlMatcher.php' या' appProdUrlMatcher.php' देखते हैं, तो आप देखेंगे कि सभी मार्गों के लिए 'HEAD' विधि हमेशा अनुमति दी जाती है। इसके साथ आपको अनुमान लगाने की आवश्यकता नहीं होगी कि रेफरर से मेल खाने के लिए कौन सी विधि उपयोग की जाती है। – Elorfin

3

मैं भी जब पूर्ण पथ मैं इसे चारों ओर इस

$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH)); 
$route = $this->container->get('router')->match($ref)['_route'];