ฉันจะรับนามแฝงเส้นทางหรือเส้นทางปัจจุบันได้อย่างไร


55

ฉันจะรับนามแฝงและ / หรือเส้นทางปัจจุบันใน Drupal 8 ได้อย่างไร

ใน Drupal 7 drupal_get_path_alias()ฉันทำอย่างนี้กับ รหัสเทียบเท่าที่ฉันควรใช้ใน Drupal 8 คืออะไร

คำตอบ:


106

คำตอบอื่น ๆ บางคำตอบนั้นถูกต้องเฉพาะใน Drupal 8 รุ่นอัลฟ่า / เบต้าก่อนหน้านี้หรือดูเหมือนจะไม่สมบูรณ์ ตั้งแต่ beta7 (และหวังว่าจะถาวร) ควรใช้กฎต่อไปนี้:

สำหรับเส้นทางดิบปัจจุบัน(เส้นทาง Drupal ที่ไม่ได้ใช้นามแฝง):

$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);

แน่นอนขึ้นอยู่กับประเภทของการประมวลผลที่คุณกำลังทำอยู่อาจเป็นการดีที่สุดที่จะทำงานกับเส้นทางแทนเส้นทาง แต่ฉันคิดว่านั่นเป็นหัวข้ออื่นทั้งหมด


ทำไมคุณพูดถึงว่ามันจะดีกว่าที่จะใช้เส้นทางแทนเส้นทาง? คุณสามารถให้ตัวอย่าง / เหตุผลสั้น ๆ ได้หรือไม่?
itsdarrylnorris

@ darol100 ผมอาจจะไม่ใช่คนที่ดีที่สุดที่จะให้คำตอบที่ครอบคลุมสำหรับว่า แต่ผมสามารถบอกคุณได้ว่าการใช้เส้นทางสำหรับการสร้าง URL เขียนโปรแกรมคิดค่าเสื่อมราคาอย่างเป็นทางการใน Drupal 8 - โปรดดูที่: drupal.org/node/2046643 เส้นทาง Symfony จัดเตรียมวิธีที่มีประสิทธิภาพยิ่งขึ้นในการแมปทรัพยากรที่เป็นอิสระจากโครงสร้างเส้นทาง (ถ้าคุณสร้างลิงก์โดยใช้เส้นทางเส้นทางนั้นลิงก์นั้นจะทำงานต่อไปแม้ว่าเส้นทาง URL / รูปแบบการเปลี่ยนแปลง)
rjacobs

เพียงแค่ทราบว่า::getAliasByPath()จะไม่ยอมรับสตริงเส้นทางโดยไม่ต้องนำเครื่องหมายทับ (ตั้งแต่ beta13 ฉันเชื่อว่า)
เครื่องจักร

5
getAliasByPathส่งคืนพา ธ โดยไม่มีคำนำหน้าภาษา ความคิดวิธีการแก้ปัญหานี้?
ฟิลิปป์ไมเคิล

1
สิ่งที่เกี่ยวกับจากภายในแม่แบบกิ่งไม้?
กิน

35

วิธีที่เหมาะสมสำหรับ URL ที่ไม่มีชื่อแทน URL

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

ไม่\Drupal::request()->getRequestUri();เคารพ Drupal ติดตั้งในโฟลเดอร์ย่อยหรือไม่?
Brian

ฉันจะทำอย่างนั้นกับเส้นทางที่ไม่ได้อยู่ในปัจจุบันได้อย่างไร มีวิธีการรับจากเพียงสตริงหรือไม่
BrandenB171

ฉันจะได้รับเส้นทางที่แน่นอนเช่นนี้ได้อย่างไร: mydrupalsite.org/node/123
mcaleaa

1
$ base_root ทั่วโลก; $ current_uri = \ Drupal :: request () -> 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-templates


1
Great find @ nicola-de-lazzari - คำตอบของคุณก็ใช้ได้ใน Views เช่นกัน มุมมอง> ฟิลด์> ผลลัพธ์การเขียน{{ url('<current>') }}ซ้ำ> เส้นทางเชื่อมโยงยอมรับแม้ว่าจะไม่ได้อยู่ในรายการภายใต้รูปแบบการแทนที่
piet

16

สำหรับการเดินทางเส้นทางปัจจุบันใน Drupal 7 คุณใช้ในการใช้current_path()แต่ใน Drupal 8 $url = Url::fromRoute('<current>');คุณใช้

ที่มา: https://www.drupal.org/node/2382211


current_path()และdrupal_get_path_alias()มันมีฟังก์ชั่นต่าง ๆ
itsdarrylnorris

นี่ควรเป็นคำตอบเนื่องจากเวอร์ชันนี้ให้เส้นทางพร้อมคำนำหน้าภาษา
Guillaume Bois

OP กำลังขอเทียบเท่า D8 ของ drupal_get_path_alias () คุณกำลังส่งคืนเส้นทางปัจจุบันและไม่ใช่เส้นทางที่ถูก aliased จาก D7 'node /'.$ nid
macjules

9

ในการรับเส้นทางปัจจุบัน (เส้นทางที่ถูก aliased):

// 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()
leymannx


2

หากคุณต้องการ URL แบบสัมบูรณ์พร้อมกับการสืบค้นด้วย:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.