获取当前的URL / URI,没有$ _GETvariables

Yii如何获取当前页面的URL。 例如:

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

但不包括$GET_['lg'] (手动parsingstring)?

我的意思是,我正在寻找类似于Yii::app()->requestUrl / Chtml::link()方法的东西,用于返回URL减去一些$_GETvariables。

编辑 :当前解决scheme:

 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参数。

这是一个完整的细分(为当前活动的控制器,模块或不创buildurl):

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

如果没有相同的主动控制器,则必须指定完整path,如下所示:

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

查看Yii指南来构buildurl: http : //www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls

要获取绝对当前的请求url(正如在地址栏中看到的那样,使用GET params和http://),我发现以下工作正常:

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

所以,你可以使用

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

得到一个绝对的webrooturl,并去除http [s]://

我不知道在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() ,并对结果进行操作以重新构build您想要的结果。

在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::app()->request->pathInfo 

像这样的东西应该工作,如果在控制器中运行:

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

这假定您在应用程序configuration中使用了“友好”的url。

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

尝试使用这个变体:

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

这是最简单的方法,我猜。

大部分答案都是错误的。

问题是没有一些查询参数获取url。

这是有用的function。 它实际上做更多的事情。 您可以删除不需要的参数,并可以添加或修改现有的参数。

 /** * 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']) 

这将从URL中删除查询参数“remove_this1”和“remove_this2”,并返回新的URL

Interesting Posts