Obtenir L'URL/URI actuelle sans quelques variables $ GET
comment, dans Yii, obtenir L'URL de la page actuelle. Par exemple:
http://www.yoursite.com/your_yii_application/?lg=pl&id=15
mais à l'exclusion du $GET_['lg']
(sans Parser la chaîne manuellement)?
je veux dire, je cherche quelque chose de similaire aux méthodes Yii::app()->requestUrl
/ Chtml::link()
, pour renvoyer des URLs moins certaines des variables $_GET
.
Modifier : solution Actuelle:
unset $_GET['lg'];
echo Yii::app()->createUrl(
Yii::app()->controller->getId().'/'.Yii::app()->controller->getAction()->getId() ,
$_GET
);
15 réponses
Yii 1
Yii::app()->request->url
Pour Yii2:
Yii::$app->request->url
Yii::app()->createAbsoluteUrl(Yii::app()->request->url)
ceci produira quelque chose dans le format suivant:
http://www.yoursite.com/your_yii_application/
la Plupart des autres réponses sont fausses. L'affiche demande l'url sans (certains) $_GET-paramètres.
voici une décomposition complète (création d'url pour le contrôleur actif, modules ou non):
// 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;
lorsque vous n'avez pas le même contrôleur actif, vous devez spécifier le chemin complet comme ceci:
Yii::app()->createUrl('/controller/action');
Yii::app()->createUrl('/module/controller/action');
consultez le guide Yii pour construire des url en général: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#creating-urls
pour obtenir l'url de requête absolue courante (exactement comme vu dans la barre d'adresse, avec GET params et http://) j'ai trouvé que le suivant fonctionne bien:
Yii::app()->request->hostInfo . Yii::app()->request->url
à Yii2 vous pouvez faire:
use yii\helpers\Url;
$withoutLg = Url::current(['lg'=>null], true);
plus d'information: https://www.yiiframework.com/doc/api/2.0/yii-helpers-baseurl#current%28%29-detail
je ne sais pas à propos de faire dans Yii, mais vous pourriez faire cela, et il doit travailler n'importe où (en grande partie levé de ma réponse ici ):
// 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;
alternativement, vous pouvez passer le résultat de l'une des méthodes Yii dans parse_url()
, et manipuler le résultat pour reconstruire ce que vous voulez.
ainsi, vous pouvez utiliser
Yii::app()->getBaseUrl(true)
pour obtenir une url Webroot absolue, et supprimer le http[s]: / /
Vous êtes certainement à la recherche de ce
Yii::app()->request->pathInfo
quelque chose comme ceci devrait fonctionner, si exécuté dans le contrôleur:
$controller = $this;
$path = '/path/to/app/'
. $controller->module->getId() // only necessary if you're using modules
. '/' . $controller->getId()
. '/' . $controller->getAction()->getId()
. '/';
cela suppose que vous utilisez des URL 'friendly' dans votre application config.
Pour Yii2:
Cela devrait être plus sûr Yii::$app->request->absoluteUrl
plutôt que Yii::$app->request->url
la Plupart des réponses sont fausses.
la Question Est d'obtenir une url sans param de requête .
Voici la fonction qui fonctionne. Ça fait plus de choses en fait. Vous pouvez supprimer le paramètre que vous ne voulez pas et vous pouvez ajouter ou modifier un existant.
/**
* 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);
}
utilisation:
ClassName:: getUpdatedUrl('',[],['remove_this1','remove_this2'])
cela supprimera la requête params 'remove_this1' et 'remove_this2' de L'URL et vous retournera la nouvelle URL