मुझे वर्तमान पथ उपनाम या पथ कैसे मिलेगा?


56

मैं Drupal 8 में वर्तमान उपनाम और / या पथ कैसे प्राप्त कर सकता हूं?

Drupal 7 में मैंने इसके साथ किया drupal_get_path_alias()। Drupal 8 में मुझे किस समान कोड का उपयोग करना चाहिए?

जवाबों:


108

अन्य उत्तरों में से कुछ केवल Drupal 8 के पिछले अल्फा / बीटा संस्करणों के दौरान सही थे, या अपूर्ण प्रतीत हो रहे थे। Beta7 के रूप में (और उम्मीद है कि स्थायी रूप से), निम्नलिखित नियम लागू होने चाहिए:

वर्तमान कच्चे रास्ते के लिए (अन-अलिस्ड ड्रुपल पथ):

$current_path = \Drupal::service('path.current')->getPath()

वर्तमान URI के लिए , जो कि अनुरोध का प्रत्यक्ष प्रतिनिधित्व बहुत सुंदर है (इसमें क्वेरी स्ट्रिंग भी शामिल हो सकती है):

$current_uri = \Drupal::request()->getRequestUri();

इस बात की कोई गारंटी नहीं है कि यह $current_uriमान आपको एक उपनाम देगा, भले ही वह अनुरोध के लिए उपलब्ध हो, क्योंकि यह केवल यह दर्शाता है कि उपयोगकर्ता ने क्या अनुरोध किया है। इसलिए सख्ती से करें कि आप क्या पूछ रहे हैं (यदि उपलब्ध हो तो उर्फ ​​प्राप्त करें, और यदि नहीं) तो मुझे लगता है कि आप कर सकते हैं:

$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);

बेशक आप जिस प्रकार की प्रोसेसिंग कर रहे हैं, उसके आधार पर रास्तों के बजाय मार्गों के साथ काम करना सबसे अच्छा हो सकता है, लेकिन मुझे लगता है कि यह एक पूरा विषय है।


आप क्यों उल्लेख करते हैं कि रास्तों के बजाय मार्गों का उपयोग करना बेहतर होगा? क्या आप एक संक्षिप्त उदाहरण / कारण प्रदान कर सकते हैं?
इसकेदारलीनोरिस

@ darol100, मैं उसके लिए एक व्यापक जवाब देने के लिए सबसे अच्छा व्यक्ति नहीं हो सकता है, लेकिन मैं आपको बता सकता हूं कि प्रोग्रामेटिक URL पीढ़ी के लिए रास्तों का उपयोग आधिकारिक तौर पर Drupal 8 में किया गया है - देखें: drupal.org/node/2046643 । सिम्फनी मार्ग पथ संरचनाओं से स्वतंत्र संसाधनों को मैप करने के लिए एक अधिक मजबूत तरीका प्रदान करते हैं (यदि आप मार्गों का उपयोग करके लिंक बनाते हैं, तो वह लिंक URL पथ / पैटर्न में परिवर्तन होने पर भी काम करता रहेगा)।
rjacobs

बस एक नोट जो ::getAliasByPath()अब प्रमुख स्लैश के बिना एक पथ स्ट्रिंग को स्वीकार नहीं करेगा (क्योंकि बीटा 13 मुझे विश्वास है)।
अन्यमेपाइन्स

5
getAliasByPathबिना भाषा उपसर्ग के पथ को वापस करता है। कुछ पता है इसे कैसे हल करना है?
फिलिप माइकल

1
क्या एक टहनी टेम्पलेट के भीतर से?
ईएटी

35

URL उपनाम के बिना URL के लिए उचित तरीका।

$current_path = \Drupal::service('path.current')->getPath()

क्या \Drupal::request()->getRequestUri();ड्रुपल एक सबफ़ोल्डर में सम्मान स्थापित करता है?
ब्रायन

मैं ऐसा कैसे करूँगा कि एक वर्तमान पथ के लिए नहीं? वहाँ सिर्फ एक स्ट्रिंग से इसे प्राप्त करने का एक तरीका है?
ब्रैंडनब 171

मुझे पूर्ण पथ कैसे मिलता है, जैसे कि: mydrupalsite.org/node/123 ?
mcaleaa

1
वैश्विक $ base_root; $ current_uri = \ Drupal :: अनुरोध () -> getRequestUri (); $ current_path = $ base_root। $ current_uri;
ठीक करें

18

Drupal 8 में आप इसे Twig के साथ कर सकते हैं:

{{ url('<current>') }}

उदाहरण:

<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>

से: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-tapers


1
शानदार खोज @ निकोला-डी-लाज़री - साथ ही आपके उत्तर दृश्य में भी काम करते हैं। दृश्य> फ़ील्ड्स> परिणाम पुन: लिखें> लिंक पथ स्वीकार्यता स्वीकार करता है {{ url('<current>') }}भले ही प्रतिस्थापन पैटर्न के तहत सूचीबद्ध नहीं है।
पीट

16

Drupal 7 में वर्तमान पथ प्राप्त करने के लिए, आप उपयोग करने के लिए उपयोग करते हैं current_path(), लेकिन Drupal 8 में आप उपयोग करते हैं $url = Url::fromRoute('<current>');

स्रोत: https://www.drupal.org/node/2382211


current_path()और drupal_get_path_alias()वे विभिन्न कार्य हैं।
दादरीर्लोरिस

यह उत्तर होना चाहिए क्योंकि यह संस्करण भाषा उपसर्ग के साथ पथ देता है।
गिलियूम बोइस

ओपी dr8al_get_path_alias () के डी 8 समकक्ष के लिए पूछ रहा है। आप वर्तमान पथ पर लौट रहे हैं और डी 7 'नोड /' + एनओडी से एलियाडेड पथ नहीं
macjules

9

वर्तमान पथ (अन्य पथ) पाने के लिए:

// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');

वर्तमान पथ (सिस्टम पथ) पाने के लिए:

// Returns node/1
$path = $url->getInternalPath();

7

Drupal 8 के लिए, यह सबसे साफ समाधान है जिसे मैं पा सकता था:

Url::fromRoute('<current>',array(),array('absolute'=>'true'));

5
\Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])->toString()
13


2

यदि आप संपूर्ण URL को क्वेरिस्ट्रिंग के साथ भी चाहते हैं:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.