Maison  >  Article  >  développement back-end  >  Résoudre le problème de la production d'URL dans le framework Yii

Résoudre le problème de la production d'URL dans le framework Yii

不言
不言original
2018-06-19 13:54:451242parcourir

Un résumé des problèmes de production d'URL dans le framework yii, les amis dans le besoin peuvent s'y référer.

Le code est le suivant :

<?php echo CHtml::link(&#39;错误链接&#39;,&#39;user/register&#39;)?> 
<?php echo CHtml::link(&#39;正确链接&#39;,array(&#39;user/register&#39;))?>

Supposons que la configuration d'UrlManager soit définie sur le mode Path et que la configuration par défaut de yii soit utilisée :

&#39;urlManager&#39;=>array( 
&#39;urlFormat&#39;=>&#39;path&#39;, 
&#39;rules&#39;=>array( 
&#39;<controller:\w+>/<id:\d+>&#39;=>&#39;<controller>/view&#39;, 
&#39;<controller:\w+>/<action:\w+>/<id:\d+>&#39;=>&#39;<controller>/<action>&#39;, 
&#39;<controller:\w+>/<action:\w+>&#39;=>&#39;<controller>/<action>&#39;, 
), 
),

Les deux lignes de code ci-dessus seront produites. Quel type d'adresse de lien ?
http://0bf677d03126a8829d141e9c54ef1239/user/register //Lien erroné
http://0bf677d03126a8829d141e9c54ef1239/index.php/user/register //Lien correct
Non . Si un lien est erroné, le navigateur renverra une erreur 404. Le deuxième lien accédera à la méthode Register de UserController. La différence est que lorsque le deuxième lien est généré, le paramètre que nous transmettons est un tableau, tandis que la première méthode est une simple chaîne. Lorsque Yii traite Url, lorsqu'il rencontre une chaîne simple, il utilisera directement la chaîne comme URL finale. Lorsqu'il rencontrera un tableau, il appellera CreateUrl du contrôleur pour générer l'URL
En parlant de chaînes simples, ces deux-là. Il existe en fait une différence très essentielle entre les deux liens. Bien qu'il s'agisse également de la chaîne « user/register », la première chaîne représente un chemin relatif de 13 caractères, tandis que le deuxième lien représente l'action de registre du UserController, qui a une signification particulière.
Vous trouverez ci-joint le code source de la méthode de traitement d'URL de Yii, NormalizeUrl :

/** 
* Normalizes the input parameter to be a valid URL. 
* 
* If the input parameter is an empty string, the currently requested URL will be returned. 
* 
* If the input parameter is a non-empty string, it is treated as a valid URL and will 
* be returned without any change. 
* 
* If the input parameter is an array, it is treated as a controller route and a list of 
* GET parameters, and the {@link CController::createUrl} method will be invoked to 
* create a URL. In this case, the first array element refers to the controller route, 
* and the rest key-value pairs refer to the additional GET parameters for the URL. 
* For example, <code>array(&#39;post/list&#39;, &#39;page&#39;=>3)</code> may be used to generate the URL 
* <code>/index.php?r=post/list&page=3</code>. 
* 
* @param mixed $url the parameter to be used to generate a valid URL 
* @return string the normalized URL 
*/ 
public static function normalizeUrl($url) 
{ 
if(is_array($url)) 
{ 
if(isset($url[0])) 
{ 
if(($c=Yii::app()->getController())!==null) 
$url=$c->createUrl($url[0],array_splice($url,1)); 
else 
$url=Yii::app()->createUrl($url[0],array_splice($url,1)); 
} 
else 
$url=&#39;&#39;; 
} 
return $url===&#39;&#39; ? Yii::app()->getRequest()->getUrl() : $url; 
}

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez. faites attention au site Web PHP chinois !

Recommandations associées :

À propos de l'utilisation du composant de pagination yii

À propos de yii utilisant le style de pagination bootstrap

Analyse de la requête d'association de table Yii2.0

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn