ฉันจะรับนามแฝงและ / หรือเส้นทางปัจจุบันใน Drupal 8 ได้อย่างไร
ใน Drupal 7 drupal_get_path_alias()
ฉันทำอย่างนี้กับ รหัสเทียบเท่าที่ฉันควรใช้ใน Drupal 8 คืออะไร
ฉันจะรับนามแฝงและ / หรือเส้นทางปัจจุบันใน Drupal 8 ได้อย่างไร
ใน Drupal 7 drupal_get_path_alias()
ฉันทำอย่างนี้กับ รหัสเทียบเท่าที่ฉันควรใช้ใน Drupal 8 คืออะไร
คำตอบ:
คำตอบอื่น ๆ บางคำตอบนั้นถูกต้องเฉพาะใน 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);
แน่นอนขึ้นอยู่กับประเภทของการประมวลผลที่คุณกำลังทำอยู่อาจเป็นการดีที่สุดที่จะทำงานกับเส้นทางแทนเส้นทาง แต่ฉันคิดว่านั่นเป็นหัวข้ออื่นทั้งหมด
::getAliasByPath()
จะไม่ยอมรับสตริงเส้นทางโดยไม่ต้องนำเครื่องหมายทับ (ตั้งแต่ beta13 ฉันเชื่อว่า)
getAliasByPath
ส่งคืนพา ธ โดยไม่มีคำนำหน้าภาษา ความคิดวิธีการแก้ปัญหานี้?
วิธีที่เหมาะสมสำหรับ URL ที่ไม่มีชื่อแทน URL
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
เคารพ Drupal ติดตั้งในโฟลเดอร์ย่อยหรือไม่?
ใน Drupal 8 คุณสามารถทำได้ด้วย Twig:
{{ url('<current>') }}
ตัวอย่าง:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
จาก: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
ซ้ำ> เส้นทางเชื่อมโยงยอมรับแม้ว่าจะไม่ได้อยู่ในรายการภายใต้รูปแบบการแทนที่
สำหรับการเดินทางเส้นทางปัจจุบันใน Drupal 7 คุณใช้ในการใช้current_path()
แต่ใน Drupal 8 $url = Url::fromRoute('<current>');
คุณใช้
current_path()
และdrupal_get_path_alias()
มันมีฟังก์ชั่นต่าง ๆ
ในการรับเส้นทางปัจจุบัน (เส้นทางที่ถูก aliased):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
ในการรับเส้นทางปัจจุบัน (เส้นทางของระบบ):
// Returns node/1
$path = $url->getInternalPath();
สำหรับ Drupal 8 นี่คือคำตอบที่สะอาดที่สุดที่ฉันพบได้:
Url::fromRoute('<current>',array(),array('absolute'=>'true'));
\Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])->toString()
ในทวิกเทมเพลต / Drupal 8:
URL ของหน้าปัจจุบัน
{{ url('<current>') }}
เส้นทางเท่านั้น
{{ path('<current>') }}
ดู: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
หากคุณต้องการ URL แบบสัมบูรณ์พร้อมกับการสืบค้นด้วย:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();