2015-03-07 12 views
9

मेरे मार्गSymfony2 - TWIG टेम्पलेट में वर्तमान URL या मार्ग प्राप्त करें?

admin: 
     path:  /admin/ 
     defaults: { _controller: CatalogWebBundle:Admin:admin } 

है मैं कैसे पीएचपी टेम्पलेट में मार्ग नाम मिल सकता है?

+2

मुझे लगता है कि आप जुड़वां में अनुमान लगा सकते हैं कि आप php टेम्पलेट के लिए 'app.request.attributes.get ('_ route')' का उपयोग कर सकते हैं, आप समकक्ष कोड –

उत्तर

13

वर्तमान URL

$request->getRequestUri(); या app.request.uri

मार्ग खुद के लिए के रूप में, सबसे अच्छा अभ्यास अपने नियंत्रक में पैरामीटर के रूप में इसकी सुई देने, the doc here देखना है पाने के लिए। आप $request->attributes->get('_route') या app.request.attributes.get('_route') का उपयोग कर सकते हैं लेकिन यह विश्वसनीय नहीं है, उदाहरण के लिए यह won't work with forwards है क्योंकि आप एक नियंत्रक के लिए अग्रेषित कर रहे हैं, पथ पर नहीं। और यह वास्तव में केवल meant for debugging purposes according to Fabien (@fabpot), the creator है, इसलिए मैं भविष्य में उन्नयन के लिए इस पर भरोसा नहीं करता हूं।

Sidenote

avoid $request->get() कभी भी आप कर सकते हैं करने के लिए, कोई $request->get('_route') याद रखें, तो के रूप में मैं इसी तरह के सवाल

पर कुछ जवाब में देखा है आप नियंत्रकों में लचीलेपन की जरूरत नहीं है, तो यह को बेहतर सार्वजनिक संपत्ति के बजाय स्पष्ट रूप से अनुरोध पैरामीटर प्राप्त करें (गुण, क्वेरी, अनुरोध)

कारण यह है कि उस में दिखेगा सार्वजनिक गुण (गुण, क्वेरी & अनुरोध) ने कहा जा रहा है सिर्फ एक (विशेषताएँ) के बजाय, यह बहुत धीमी

+0

प्राप्त कर सकते हैं यदि संभव हो तो अनुरोधस्टैक का उपयोग करें: http://symfony.com/blog/new -इन-सिम्फनी-2-4-द-अनुरोध-स्टैक – mYkon

+0

किसी सेवा में अनुरोधस्टैक का उपयोग करें। अनुरोध नियंत्रकों के लिए जाने का तरीका है। –

1

Symfony2 में मार्ग का नाम प्राप्त करने के लिए निम्नलिखित कोड का टुकड़ा दर्ज बनाने

$request = $this->container->get('request'); 
$routeName = $request->get('_route'); 

Symfony2 में URL प्राप्त करने के लिए,

$request = $this->container->get('request'); 
$routeURL = $request->getRequestUri(); 
5

नहीं एक अच्छा टहनी में सीधे बात करने के लिए लेकिन आप अभी भी कर सकते हैं। बेहतर तरीका इसे नियंत्रक से तर्क के रूप में पास करना है।

ट्विग में मार्ग पैरामीटर प्राप्त करें।

{{ app.request.attributes.get('_route_params') }} 

और

टहनी में पूरे बंडल नाम हो जाता है।

{{ app.request.attributes.get("_controller") }} 

ट्विग में मार्ग का नाम प्राप्त करें।

{{ app.request.attributes.get('_route') }} 
0

कुछ मामलों में, app.request.uri वर्तमान पृष्ठ का यूआरएल वापस नहीं करेगा।

उदाहरण:

{{ render(controller('AppBundle:MyController:myBlock')) }} 

और myBlockAction में, आप एक और टेम्पलेट प्रस्तुत करना, कहना block.html.twig: अपने पृष्ठ टेम्पलेट में, आप एक नियंत्रक के माध्यम से कहते हैं।

http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock 

आप block.html.twig अंदर से गाया पेज के संपूर्ण url प्राप्त करना चाहते हैं, तो आप इसे php $ _SERVER चर से पुनः कर सकते हैं::

block.html.twig से app.request.uri लिए एक कॉल की तरह कुछ प्रदर्शित करेगा

{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ 
    app.request.server.get('SERVER_NAME') ~ 
    app.request.server.get('PHP_SELF') }} 

यदि आवश्यक हो तो आप QUERY_STRING भी जोड़ सकते हैं।

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