Drupal 8'deki mevcut takma adı ve / veya yolu nasıl alabilirim?
Drupal 7'de bunu ben yaptım drupal_get_path_alias()
. Drupal 8'de kullanmam gereken eşdeğer kod nedir?
Drupal 8'deki mevcut takma adı ve / veya yolu nasıl alabilirim?
Drupal 7'de bunu ben yaptım drupal_get_path_alias()
. Drupal 8'de kullanmam gereken eşdeğer kod nedir?
Yanıtlar:
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.
::getAliasByPath()
Artık bir eğik çizgi olmadan bir yol dizesini artık kabul etmeyecek bir not (beta13'ten beri).
getAliasByPath
dil öneki olmadan yolu döndürür. bunu nasıl çözeceğimize dair bir fikri olan?
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 ?
Drupal 8'de Twig ile bunu yapabilirsiniz:
{{ url('<current>') }}
örnek:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
from: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
Değiştirme kalıpları altında listelenmemiş olsa bile kabul eder .
Geçerli yolu Drupal 7'de almak için kullanmak current_path()
, fakat Drupal 8'de kullanmaktasınız $url = Url::fromRoute('<current>');
.
current_path()
ve drupal_get_path_alias()
bunlar farklı fonksiyonlar.
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();
Dal şablonunda / Drupal 8:
Geçerli sayfanın URL'si
{{ url('<current>') }}
sadece PATH
{{ path('<current>') }}
Bakınız: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Querystring ile mutlak URL'yi de istiyorsanız:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();