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

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

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

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

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

Изменить : Текущее решение:

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

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

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

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

Большинство других ответов неверны. Плакат запрашивает 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

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

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

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

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

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

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

 use yii\helpers\Url; ... $withoutLg = Url::current(['lg'=>NULL], TRUE); 

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

Я не знаю, как это сделать в 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; с // 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() и обработать результат, чтобы перестроить то, что вы хотите.

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

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

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

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

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

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

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

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

Пожалуй, это самый простой способ.

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

Вопрос заключается в получении 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); } не /** * 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-адрес