如何获取当前路径别名或路径?


Answers:


107

其他一些答案仅在Drupal 8的早期alpha / beta版本中正确,或者似乎不完整。从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,我可能不是提供最佳答案的最佳人选,但是我可以告诉您,Drupal 8中正式弃用了用于程序化URL生成的路径-请参阅:drupal.org/node/2046643。Symfony路由提供了一种更健壮的方式来映射与路径结构无关的资源(如果您使用路由构建链接,即使URL路径/模式发生更改,该链接也将继续工作)。
rjacobs 2015年

只是一个注释,::getAliasByPath()它将不再接受没有前导斜线的路径字符串(我相信,自beta13起)。
–othermachines

5
getAliasByPath确实返回没有语言前缀的路径。任何想法如何解决这个问题?
菲利普·迈克尔

1
在树枝模板中怎么办?
2013年

35

没有URL别名的URL的正确方法。

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

是否\Drupal::request()->getRequestUri();尊重Drupal的子文件夹安装?
布莱恩(Brian)

我将如何针对当前路径?有没有办法从一个字符串中获取它?
BrandenB171 '16

如何获取绝对路径,例如:mydrupalsite.org/node/123
mcaleaa

1
全局$ base_root; $ current_uri = \ Drupal :: request()-> getRequestUri(); $ current_path = $ base_root。$ current_uri;
oknate

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
很棒的发现@ nicola-de-lazzari-同样,您的回答也适用于Views。“视图”>“字段”>“重写结果”>“链接路径”接受,{{ url('<current>') }}即使未在“替换模式”下列出。
piet 18-3-6

16

要在Drupal 7中获取当前路径,您可以使用current_path(),但是在Drupal 8中您可以使用$url = Url::fromRoute('<current>');

资料来源:https : //www.drupal.org/node/2382211


current_path()drupal_get_path_alias()他们不同的功能。
itsdarrylnorris

这应该是答案,因为此版本提供了带有语言前缀的路径。
纪尧姆·博伊斯

OP要求提供等效于drupal_get_path_alias()的D8。您正在从D7'node /'返回当前路径,而不是别名路径。$ nid
macjules,

9

要获取当前路径(别名路径):

// 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 '16


2

如果您也想要带有查询字符串的绝对URL:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.