Geçerli yol takma adını veya yolunu nasıl alabilirim?


Yanıtlar:


108

Diğer cevapların bazıları sadece Drupal 8'in önceki alfa / beta sürümleri sırasında doğruydu ya da eksik görünüyordu. Beta7'den itibaren (ve umarım kalıcı olarak), aşağıdaki kurallar geçerli olmalıdır:

Geçerli işlenmemiş yol için (takma adsız Drupal yolu):

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

Hemen hemen isteğin doğrudan bir temsili olan mevcut URI için (bir sorgu dizesi bile içerebilir):

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

Tabii ki $current_uri, kullanıcının istediği şeyi temsil ettiği için, talep için mevcut olsa bile , bu değerin size bir takma ad vereceği garantisi yoktur . Bu yüzden ne istediğinizi kesin olarak yapmak için (eğer varsa takma isim alın ve eğer yoksa yolu) yapabileceğinizi düşünüyorum:

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

Tabii ki yaptığınız işlemin türüne bağlı olarak, yollar yerine rotalarla çalışmak en iyisi olabilir, ama sanırım bu tamamen başka bir konu.


neden yollar yerine yol kullanmanın daha iyi olacağını söylemiştiniz? Kısa bir örnek / sebep sunabilir misiniz?
itsdarrylnorris

@ darol100, bunun için kapsamlı bir cevap verebilecek en iyi kişi olmayabilirim, ancak programatik URL oluşturma yollarının kullanımının resmen Drupal 8’de amorti edildiğini söyleyebilirim - bkz: drupal.org/node/2046643 . Symfony yolları, yolları yol yapılarından bağımsız olarak kaynakları eşleştirmek için daha sağlam bir yol sağlar (yolları kullanarak bir bağlantı oluşturursanız, URL yolu / deseni değişse bile bu bağlantı çalışmaya devam eder).
rjacobs

::getAliasByPath()Artık bir eğik çizgi olmadan bir yol dizesini artık kabul etmeyecek bir not (beta13'ten beri).
makineler

5
getAliasByPathdil öneki olmadan yolu döndürür. bunu nasıl çözeceğimize dair bir fikri olan?
Philipp Michael,

1
bir dal şablonundan ne haber?
EAT

35

URL takma adı olmayan URL için uygun yol.

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

\Drupal::request()->getRequestUri();Drupal'ın bir alt klasördeki kurulumlarına saygı duyuyor mu ?
Brian,

güncel olmayan bir yol için bunu nasıl yaparım? sadece bir dize almanın bir yolu var mı?
BrandenB171

Bunun gibi mutlak yolu nasıl alabilirim: mydrupalsite.org/node/123 ?
mcaleaa,

1
global $ base_root; $ current_uri = \ Drupal :: request () -> getRequestUri (); $ current_path = $ base_root. $ current_uri;
Aralık'ta


16

Geçerli yolu Drupal 7'de almak için kullanmak current_path(), fakat Drupal 8'de kullanmaktasınız $url = Url::fromRoute('<current>');.

Kaynak: https://www.drupal.org/node/2382211


current_path()ve drupal_get_path_alias()bunlar farklı fonksiyonlar.
itsdarrylnorris

Bu sürüm dil öneki ile yol verir gibi cevap bu olmalıdır.
Guillaume Bois

OP, d8'in drupal_get_path_alias () eşdeğeri için soruyor. Şu anki yolu ve diğer adını D7 'node /'.$ nid
alieced yolundan döndürüyorsunuz

9

Geçerli yolu (takma yol) almak için:

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

Geçerli yolu almak için (sistem yolu):

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

7

Drupal 8 için bulabildiğim en temiz çözüm bu:

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

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


2

Querystring ile mutlak URL'yi de istiyorsanız:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.