获取当前没有$ _GET变量的URL/URI

Seb*_*ian 42 php frameworks uri yii current-page

在Yii中,如何获取当前页面的URL.例如:

http://www.yoursite.com/your_yii_application/?lg=pl&id=15
Run Code Online (Sandbox Code Playgroud)

但不包括$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 
);
Run Code Online (Sandbox Code Playgroud)

Fel*_*ida 73

Yii 1

Yii::app()->request->url
Run Code Online (Sandbox Code Playgroud)

For Yii2:

Yii::$app->request->url
Run Code Online (Sandbox Code Playgroud)

  • Yii2:Yii :: $ app-> request-> url (4认同)
  • 这不是海报所要求的.请参阅以下答案:http://stackoverflow.com/questions/8413062/yii-how-do-you-get-current-url-uri-without-some-of-get-variables/22460712#22460712 (3认同)
  • 这是错误的答案.用户需要排除一些GET参数. (3认同)

Bha*_*gav 30

Yii::app()->createAbsoluteUrl(Yii::app()->request->url)
Run Code Online (Sandbox Code Playgroud)

这将输出以下格式的内容:

http://www.yoursite.com/your_yii_application/
Run Code Online (Sandbox Code Playgroud)


mar*_*out 21

大多数其他答案都是错误的.海报要求没有(一些)$ _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(['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;
Run Code Online (Sandbox Code Playgroud)

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

Yii::app()->createUrl('/controller/action');
Yii::app()->createUrl('/module/controller/action');
Run Code Online (Sandbox Code Playgroud)

查看Yii关于构建网址的指南:http://www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls

  • 发现它:__ Yii2__:```Yii :: $ app-> urlManager-> createUrl(array_merge([Yii :: $ app-> requestedRoute],$ getParams));``` (3认同)

Jam*_*her 12

要获得绝对当前请求URL(完全如地址栏中所示,使用GET参数和http://),我发现以下情况很有效:

Yii::app()->request->hostInfo . Yii::app()->request->url
Run Code Online (Sandbox Code Playgroud)


Vla*_*mir 7

在Yii2中你可以做到:

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

更多信息:https: //www.yiiframework.com/doc/api/2.0/yii-helpers-baseurl#current%28%29-detail


Dav*_*dom 5

我不知道如何在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;
Run Code Online (Sandbox Code Playgroud)

或者,您可以将Yii方法之一的结果传递给parse_url(),并操纵结果以重新构建所需的内容。


nis*_*asi 5

所以,你可以使用

Yii::app()->getBaseUrl(true)
Run Code Online (Sandbox Code Playgroud)

获取一个绝对的webroot网址,并删除http [s]://


Din*_*til 5

您肯定在搜索这个

Yii::app()->request->pathInfo
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案。但对于yii2,它应该是`Yii :: $ app-> request-> pathInfo` (3认同)