如何在Drupal 8中获取当前的别名和/或路径?
在Drupal 7中,我使用drupal_get_path_alias()
。在Drupal 8中应该使用什么等效代码?
如何在Drupal 8中获取当前的别名和/或路径?
在Drupal 7中,我使用drupal_get_path_alias()
。在Drupal 8中应该使用什么等效代码?
Answers:
其他一些答案仅在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);
当然,根据您正在执行的处理类型,最好使用路由而不是路径,但是我想这是另一个主题。
::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()
他们不同的功能。
要获取当前路径(别名路径):
// 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()
在Twig模板/ Drupal 8中:
当前页面的URL
{{ url('<current>') }}
只有路径
{{ path('<current>') }}
参见:https : //www.drupal.org/docs/8/theming/twig/functions-in-twig-templates