Bagaimana saya bisa mendapatkan alias dan / atau jalur saat ini di Drupal 8?
Di Drupal 7 saya melakukan ini dengan drupal_get_path_alias()
. Apa kode setara yang harus saya gunakan di Drupal 8?
Bagaimana saya bisa mendapatkan alias dan / atau jalur saat ini di Drupal 8?
Di Drupal 7 saya melakukan ini dengan drupal_get_path_alias()
. Apa kode setara yang harus saya gunakan di Drupal 8?
Jawaban:
Beberapa jawaban lain hanya benar selama versi alpha / beta sebelumnya dari Drupal 8, atau tampaknya tidak lengkap. Pada beta7 (dan semoga secara permanen), aturan berikut harus berlaku:
Untuk jalur mentah saat ini (jalur Drupal tidak beralasan):
$current_path = \Drupal::service('path.current')->getPath()
Untuk URI saat ini , yang merupakan representasi langsung dari permintaan (bahkan mungkin termasuk string kueri):
$current_uri = \Drupal::request()->getRequestUri();
Tentu saja tidak ada jaminan bahwa $current_uri
nilai ini akan memberi Anda alias, bahkan jika ada yang tersedia untuk permintaan tersebut, karena hanya mewakili apa yang diminta pengguna. Jadi untuk benar-benar melakukan apa yang Anda minta (dapatkan alias jika tersedia, dan path jika tidak) saya pikir Anda bisa melakukannya:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Tentu saja tergantung pada jenis pemrosesan yang Anda lakukan, mungkin yang terbaik adalah bekerja dengan rute daripada jalur, tapi saya kira itu adalah topik lain.
::getAliasByPath()
tidak akan lagi menerima jalur string tanpa garis miring (sejak beta13 saya percaya).
getAliasByPath
mengembalikan jalur tanpa awalan bahasa. Ada ide untuk mengatasi ini?
Cara yang tepat untuk URL tanpa alias URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
penghormatan terhadap Drupal dipasang di subfolder?
Di Drupal 8 Anda dapat melakukan ini dengan Twig:
{{ url('<current>') }}
contoh:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
dari: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
meskipun tidak tercantum di bawah Pola penggantian.
Untuk mendapatkan jalur saat ini di Drupal 7, Anda gunakan untuk menggunakan current_path()
, tetapi di Drupal 8 Anda gunakan $url = Url::fromRoute('<current>');
.
current_path()
dan drupal_get_path_alias()
mereka adalah fungsi yang berbeda.
Untuk mendapatkan jalur saat ini (alias path):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Untuk mendapatkan jalur saat ini (jalur sistem):
// Returns node/1
$path = $url->getInternalPath();
Di ranting template / Drupal 8:
URL halaman saat ini
{{ url('<current>') }}
hanya PATH
{{ path('<current>') }}
Lihat: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Jika Anda ingin URL absolut dengan querystring juga:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();