¿Cómo puedo obtener el alias y / o ruta actual en Drupal 8?
En Drupal 7 hice esto con drupal_get_path_alias()
. ¿Cuál es el código equivalente que debo usar en Drupal 8?
¿Cómo puedo obtener el alias y / o ruta actual en Drupal 8?
En Drupal 7 hice esto con drupal_get_path_alias()
. ¿Cuál es el código equivalente que debo usar en Drupal 8?
Respuestas:
Algunas de las otras respuestas solo fueron correctas durante las versiones alfa / beta anteriores de Drupal 8, o parecían estar incompletas. A partir de beta7 (y con suerte permanentemente), deberían aplicarse las siguientes reglas:
Para la ruta sin procesar actual (la ruta de Drupal sin alias):
$current_path = \Drupal::service('path.current')->getPath()
Para el URI actual , que es más o menos una representación directa de la solicitud (incluso puede incluir una cadena de consulta):
$current_uri = \Drupal::request()->getRequestUri();
Por supuesto, no hay garantía de que este $current_uri
valor le dé un alias, incluso si hay uno disponible para la solicitud, ya que solo representa lo que el usuario ha solicitado. Entonces, para hacer estrictamente lo que está pidiendo (obtener un alias si está disponible y una ruta si no), creo que podría hacer:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Por supuesto, dependiendo del tipo de procesamiento que esté haciendo, puede ser mejor trabajar con rutas en lugar de rutas, pero supongo que ese es un tema completamente diferente.
::getAliasByPath()
ya no aceptará una cadena de ruta sin una barra inclinada (desde beta13, creo).
getAliasByPath
devuelve la ruta sin prefijo de idioma. Alguna idea de como resolver esto?
La forma correcta de la URL sin el alias de URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
Respeta las instalaciones de Drupal en una subcarpeta?
En Drupal 8 puedes hacer esto con Twig:
{{ url('<current>') }}
ejemplo:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
de: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
aunque no se encuentre en la lista de Patrones de reemplazo.
Para obtener la ruta actual en Drupal 7, se usa current_path()
, pero en Drupal 8 se usa $url = Url::fromRoute('<current>');
.
current_path()
y drupal_get_path_alias()
son funciones diferentes.
Para obtener la ruta actual (ruta con alias):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Para obtener la ruta actual (ruta del sistema):
// Returns node/1
$path = $url->getInternalPath();
En Twig template / Drupal 8:
URL de la página actual
{{ url('<current>') }}
solo RUTA
{{ path('<current>') }}
Ver: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Si desea la URL absoluta con la cadena de consulta también:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();