Obtenga la URL/URI actual sin algunas de las variables $_GET

5 minutos de lectura

avatar de usuario
Sebastián

Cómo, en Yii, obtener la URL de la página actual. Por ejemplo:

http://www.yoursite.com/your_yii_application/?lg=pl&id=15

pero excluyendo el $GET_['lg'] (sin analizar la cadena manualmente)?

Quiero decir, estoy buscando algo similar a la Yii::app()->requestUrl / Chtml::link() métodos, para devolver direcciones URL menos algunos de los $_GET variables

Editar: Solución actual:

unset $_GET['lg'];

echo Yii::app()->createUrl(
  Yii::app()->controller->getId()."https://stackoverflow.com/".Yii::app()->controller->getAction()->getId() , 
  $_GET 
);

  • posible duplicado de ¿Cómo eliminar la cadena de consulta y obtener solo la url?

    – T. Todua

    16 de abril de 2015 a las 13:08

  • stackoverflow.com/questions/8413062/…

    – Sarkhan

    17 de agosto de 2015 a las 11:55

avatar de usuario
felipe

yi 1

Yii::app()->request->url

Para Yii2:

Yii::$app->request->url

  • Esta debería ser la respuesta correcta, ya que el autor de la pregunta quiere terminar con Yii.

    – GusDeCool

    25 de noviembre de 2012 a las 11:24

  • Esto no es lo que pedía el cartel. Vea la respuesta a continuación: stackoverflow.com/questions/8413062/…

    – marcovtwout

    17 de marzo de 2014 a las 17:06

  • Esta es la respuesta incorrecta. El usuario debe EXCLUIR algunos parámetros GET.

    – Michael mayordomo

    17/09/2014 a las 19:47

  • Esta respuesta tiene muchos votos a favor, pero es engañosa, la respuesta de @MichaelButler es muy buena, pero puedes ver una respuesta más corta específica de yii2 stackoverflow.com/questions/8413062/…

    – Vladímir

    19 de noviembre de 2015 a las 8:24


  • Yii2: Yii::$aplicación->solicitud->url

    – Sukma Saputra

    31 de agosto de 2016 a las 8:42

Yii::app()->createAbsoluteUrl(Yii::app()->request->url)

Esto generará algo en el siguiente formato:

http://www.yoursite.com/your_yii_application/

  • Esta debería ser la respuesta correcta, a veces la URL incluye no solo el controlador y la acción, sino también la vista, y depende de los métodos de ruta.

    – Mahomedalid

    20/10/2014 a las 16:26

  • Creo que esto está mal. Porque createAbsoluteUrl espera una ruta, no una URL. La solución original del autor es bastante correcta, pero una más correcta sería: $this->createUrl($this->getRoute(), $_GET) y antes de llamarlo, desarmado de $_GET los parámetros que no deseas.

    – Alexandru Trandafir Catalín

    29/09/2016 a las 18:41

  • Esta es una respuesta terrible, ¡no la uses! Le dará un montón de errores cuando sus URL no coincidan con las rutas. por ejemplo si /news/index debe mostrar la ruta news/view por News modelo con babosa index. Con esta respuesta, obtendrá una URL incorrecta: lo redirigirá a la URL para /news/index ruta en cambio /news/view.

    – robar006

    9 de junio de 2018 a las 13:07

avatar de usuario
marcovtwout

yi 1

La mayoría de las otras respuestas son incorrectas. El cartel solicita la URL SIN (algunos) parámetros $_GET.

Aquí hay un desglose completo (creación de URL para el controlador actualmente activo, módulos o no):

// without $_GET-parameters
Yii::app()->controller->createUrl(Yii::app()->controller->action->id);

// with $_GET-parameters, HAVING ONLY supplied keys
Yii::app()->controller->createUrl(Yii::app()->controller->action->id,
    array_intersect_key($_GET, array_flip(['id']))); // include 'id'

// with all $_GET-parameters, EXCEPT supplied keys
Yii::app()->controller->createUrl(Yii::app()->controller->action->id,
    array_diff_key($_GET, array_flip(['lg']))); // exclude 'lg'

// with ALL $_GET-parameters (as mensioned in other answers)
Yii::app()->controller->createUrl(Yii::app()->controller->action->id, $_GET);
Yii::app()->request->url;

Cuando no tiene el mismo controlador activo, debe especificar la ruta completa de esta manera:

Yii::app()->createUrl('/controller/action');
Yii::app()->createUrl('/module/controller/action');

Consulte la guía de Yii para crear URL en general: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls

  • ¡Sí, gran respuesta! (y, de hecho, el único correcto para la pregunta) Sin embargo, también podría usar una actualización para Yii2 …

    – Flón

    10 de marzo de 2015 a las 13:53


  • Lo encontré: yii2: Yii::$app->urlManager->createUrl(array_merge([Yii::$app->requestedRoute], $getParams));

    – Flón

    10 de marzo de 2015 a las 14:05


Para obtener la URL de solicitud actual absoluta (exactamente como se ve en la barra de direcciones, con parámetros GET y http://), descubrí que lo siguiente funciona bien:

Yii::app()->request->hostInfo . Yii::app()->request->url

avatar de usuario
vladimir

En Yii2 puedes hacer:

use yii\helpers\Url;
$withoutLg = Url::current(['lg'=>null], true);

Más información:
https://www.yiiframework.com/doc/api/2.0/yii-helpers-baseurl#current%28%29-detail

avatar de usuario
Comunidad

No sé cómo hacerlo en Yii, pero podrías hacer esto, y debería funcionar en cualquier lugar (en gran parte sacado de mi respuesta aquí):

// Get HTTP/HTTPS (the possible values for this vary from server to server)
$myUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] && !in_array(strtolower($_SERVER['HTTPS']),array('off','no'))) ? 'https' : 'http';
// Get domain portion
$myUrl .= '://'.$_SERVER['HTTP_HOST'];
// Get path to script
$myUrl .= $_SERVER['REQUEST_URI'];
// Add path info, if any
if (!empty($_SERVER['PATH_INFO'])) $myUrl .= $_SERVER['PATH_INFO'];

$get = $_GET; // Create a copy of $_GET
unset($get['lg']); // Unset whatever you don't want
if (count($get)) { // Only add a query string if there's anything left
  $myUrl .= '?'.http_build_query($get);
}

echo $myUrl;

Alternativamente, puede pasar el resultado de uno de los métodos de Yii a parse_url()y manipule el resultado para reconstruir lo que desee.

avatar de usuario
Dinesh Patil

Definitivamente estás buscando esto

Yii::app()->request->pathInfo

  • Esta es la respuesta correcta. Pero para yii2 debería ser Yii::$app->request->pathInfo

    – RN Kushwaha

    28 de agosto de 2016 a las 3:42


¿Ha sido útil esta solución?