Получить текущий URL / URI без некоторых переменных $ _GET - PullRequest
40 голосов
/ 07 декабря 2011

Как в Yii получить URL текущей страницы. Например:

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

но исключая $GET_['lg'] (без разбора строки вручную)?

Я имею в виду, я ищу что-то похожее на Yii::app()->requestUrl / Chtml::link() методы для возврата URL-адресов минус некоторые $_GET переменные.

Редактировать : Текущее решение:

unset $_GET['lg'];

echo Yii::app()->createUrl(
  Yii::app()->controller->getId().'/'.Yii::app()->controller->getAction()->getId() , 
  $_GET 
);

Ответы [ 15 ]

71 голосов
/ 29 октября 2012

Yii 1

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

Для Yii2:

Yii::$app->request->url
29 голосов
/ 22 декабря 2012
Yii::app()->createAbsoluteUrl(Yii::app()->request->url)

Это выведет что-то в следующем формате:

http://www.yoursite.com/your_yii_application/
21 голосов
/ 17 марта 2014

Yii 1

Большинство других ответов неверны.Постер запрашивает URL-адрес БЕЗ (некоторых) $ _GET-параметров.

Вот полная разбивка (создание адреса для текущего активного контроллера, модулей или нет):

// 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;

Если у вас нет того же активного контроллера, вы должны указать полный путь следующим образом:

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

Ознакомьтесь с руководством по Yii для создания URL в целом: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls

12 голосов
/ 17 июня 2014

Чтобы получить абсолютный текущий URL-адрес запроса (в точности как в адресной строке, с параметрами GET и http://), я обнаружил, что следующее работает хорошо:

Yii::app()->request->hostInfo . Yii::app()->request->url
7 голосов
/ 29 октября 2015

В Yii2 вы можете сделать:

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

Дополнительная информация: https://www.yiiframework.com/doc/api/2.0/yii-helpers-baseurl#current%28%29-detail

5 голосов
/ 15 мая 2014

Итак, вы можете использовать

Yii::app()->getBaseUrl(true)

, чтобы получить абсолютный URL-адрес webroot, и убрать http [s]: //

5 голосов
/ 07 декабря 2011

Я не знаю, как это сделать в Yii, но вы могли бы просто сделать это, и это должно сработать где угодно (в значительной степени от моего ответа здесь ):

// 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;

В качестве альтернативы, вы можете передать результат одного из методов Yii в parse_url() и манипулировать результатом, чтобы восстановить то, что вы хотите.

4 голосов
/ 07 декабря 2015

Вы определенно ищете это

Yii::app()->request->pathInfo
1 голос
/ 13 декабря 2011

Примерно так должно работать, если запустить в контроллере:

$controller = $this;
$path = '/path/to/app/' 
  . $controller->module->getId() // only necessary if you're using modules
  . '/' . $controller->getId() 
  . '/' . $controller->getAction()->getId()
. '/';

Это предполагает, что вы используете «дружественные» URL в конфигурации вашего приложения.

0 голосов
/ 05 октября 2018

для Yii2: Это должно быть безопаснее Yii::$app->request->absoluteUrl, а не Yii::$app->request->url

...