Подтвердить что ты не робот

Получить текущий URL/URI без каких-либо переменных $_GET

Как в 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 
);
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

// 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(array('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(array('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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 7

Я не знаю, как это сделать в 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 anything left
  $myUrl .= '?'.http_build_query($get);
}

echo $myUrl;

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

Ответ 8

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

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

Ответ 9

Что-то вроде этого должно работать, если запускаться в контроллере:

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

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

Ответ 10

$validar= Yii::app()->request->getParam('id');

Ответ 11

Попробуйте использовать этот вариант:

<?php echo Yii::app()->createAbsoluteUrl('your_yii_application/?lg=pl', array('id'=>$model->id));?>

Это самый простой способ, я думаю.

Ответ 12

Большинство ответов неверны.

Вопрос заключается в том, чтобы получить url без какого-либо параметра запроса.

Вот функция, которая работает. На самом деле это делает больше. Вы можете удалить параметр, который вам не нужен, и вы можете добавить или изменить существующий.

/**
 * Function merges the query string values with the given array and returns the new URL
 * @param string $route
 * @param array $mergeQueryVars
 * @param array $removeQueryVars
 * @return string
 */
public static function getUpdatedUrl($route = '', $mergeQueryVars = [], $removeQueryVars = [])
{
    $currentParams = $request = Yii::$app->request->getQueryParams();

    foreach($mergeQueryVars as $key=> $value)
    {
        $currentParams[$key] = $value;
    }

    foreach($removeQueryVars as $queryVar)
    {
        unset($currentParams[$queryVar]);
    }

    $currentParams[0] = $route == '' ? Yii::$app->controller->getRoute() : $route;

    return Yii::$app->urlManager->createUrl($currentParams);

}

использование:

ClassName:: getUpdatedUrl('',[],['remove_this1','remove_this2'])

Это приведет к удалению параметров запроса "remove_this1" и "remove_this2" из URL-адреса и возвращает вам новый URL