如何在Yii中获取当前页面的URL。例如:
http://www.yoursite.com/your_yii_application/?lg=pl&id=15
但不包括$GET_['lg']
(不手动解析字符串)?
我的意思是,我正在寻找类似于Yii::app()->requestUrl
/ Chtml::link()
方法的内容,用于返回网址减去部分$_GET
变量。
修改:当前解决方案:
unset $_GET['lg'];
echo Yii::app()->createUrl(
Yii::app()->controller->getId().'/'.Yii::app()->controller->getAction()->getId() ,
$_GET
);
答案 0 :(得分:71)
Yii::app()->request->url
Yii::$app->request->url
答案 1 :(得分:29)
Yii::app()->createAbsoluteUrl(Yii::app()->request->url)
这将输出以下格式的内容:
http://www.yoursite.com/your_yii_application/
答案 2 :(得分:21)
其他大多数答案都是错误的。海报要求没有(一些)$ _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指南:http://www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls
答案 3 :(得分:12)
要获取绝对当前请求网址(完全如地址栏中所示,使用GET参数和http://),我发现以下情况很有效:
Yii::app()->request->hostInfo . Yii::app()->request->url
答案 4 :(得分:7)
在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 :(得分:5)
我不知道在Yii中这样做,但你可以这样做,它应该可以在任何地方工作(很大程度上取决于我的回答here):
// 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()
,并操纵结果以重新构建您想要的内容。
答案 6 :(得分:5)
所以,你可以使用
Yii::app()->getBaseUrl(true)
获取绝对webroot网址,并删除http [s]://
答案 7 :(得分:4)
你肯定在寻找这个
Yii::app()->request->pathInfo
答案 8 :(得分:1)
如果在控制器中运行,这样的东西应该可以工作:
$controller = $this;
$path = '/path/to/app/'
. $controller->module->getId() // only necessary if you're using modules
. '/' . $controller->getId()
. '/' . $controller->getAction()->getId()
. '/';
这假设您在应用配置中使用了“友好”网址。
答案 9 :(得分:0)
$validar= Yii::app()->request->getParam('id');
答案 10 :(得分:0)
Yii2
Url::current([], true);
或
Url::current();
答案 11 :(得分:0)
对于Yii2:
Yii::$app->request->absoluteUrl
比Yii::$app->request->url
答案 12 :(得分:0)
对于 Yii1
我发现首先从 CUrlManager 获取当前路由,然后再次使用该路由来构建新 url 是一种干净的方法。这样您就不会“看到”应用的 baseUrl,请参见下面的示例。
控制器/动作示例:
GET /app/customer/index/?random=param
$route = Yii::app()->urlManager->parseUrl(Yii::app()->request);
var_dump($route); // string 'customer/index' (length=14)
$new = Yii::app()->urlManager->createUrl($route, array('new' => 'param'));
var_dump($new); // string '/app/customer/index?new=param' (length=29)
模块/控制器/动作示例:
GET /app/order/product/admin/?random=param
$route = Yii::app()->urlManager->parseUrl(Yii::app()->request);
var_dump($route); // string 'order/product/admin' (length=19)
$new = Yii::app()->urlManager->createUrl($route, array('new' => 'param'));
var_dump($new); string '/app/order/product/admin?new=param' (length=34)
只有当您的 url 完全被 CUrlManager 的规则覆盖时,这才有效:)
答案 13 :(得分:-1)
尝试使用此变体:
<?php echo Yii::app()->createAbsoluteUrl('your_yii_application/?lg=pl', array('id'=>$model->id));?>
这是最简单的方法,我想。
答案 14 :(得分:-1)
大多数答案都是错误的。
问题是在没有查询参数的情况下获取网址。
这是有效的功能。它实际上做了更多的事情。您可以删除不需要的参数,也可以添加或修改现有参数。
/**
* 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'并返回新网址
答案 15 :(得分:-1)
echo Yii::$app->request->url;