Como posso obter o alias e / ou caminho atual no Drupal 8?
No Drupal 7 eu fiz isso com drupal_get_path_alias()
. Qual é o código equivalente que devo usar no Drupal 8?
Como posso obter o alias e / ou caminho atual no Drupal 8?
No Drupal 7 eu fiz isso com drupal_get_path_alias()
. Qual é o código equivalente que devo usar no Drupal 8?
Respostas:
Algumas das outras respostas estavam corretas apenas nas versões alfa / beta anteriores do Drupal 8, ou pareciam estar incompletas. A partir do beta7 (e espero que permanentemente), as seguintes regras devem ser aplicadas:
Para o caminho bruto atual (o caminho Drupal sem alias):
$current_path = \Drupal::service('path.current')->getPath()
Para o URI atual , que é praticamente uma representação direta da solicitação (pode até incluir uma string de consulta):
$current_uri = \Drupal::request()->getRequestUri();
Obviamente, não há garantia de que esse $current_uri
valor fornecerá um alias, mesmo que um esteja disponível para a solicitação, pois representa apenas o que o usuário solicitou. Então, para fazer estritamente o que você está perguntando (obtenha o alias, se disponível, e o caminho, se não), acho que você poderia fazer:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Obviamente, dependendo do tipo de processamento que você está executando, pode ser melhor trabalhar com rotas em vez de caminhos, mas suponho que esse seja um outro tópico.
::getAliasByPath()
não aceitará mais uma string de caminho sem uma barra inicial (desde a versão beta13, eu acredito).
getAliasByPath
retorna o caminho sem prefixo de idioma. Alguma idéia de como resolver isso?
A maneira correta para o URL sem o alias do URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
respeito ao Drupal instala em uma subpasta?
No Drupal 8, você pode fazer isso com o Twig:
{{ url('<current>') }}
exemplo:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
from: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
mesmo que não esteja listado em Padrões de substituição.
Para obter o caminho atual no Drupal 7, você usa current_path()
, mas no Drupal 8 você usa $url = Url::fromRoute('<current>');
.
current_path()
e drupal_get_path_alias()
são funções diferentes.
Para obter o caminho atual (caminho alternativo):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Para obter o caminho atual (caminho do sistema):
// Returns node/1
$path = $url->getInternalPath();
No modelo Twig / Drupal 8:
URL da página atual
{{ url('<current>') }}
apenas CAMINHO
{{ path('<current>') }}
Veja: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Se você deseja o URL absoluto com a string de consulta também:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();