Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung des Problems der URL-Produktion im Yii-Framework

Lösung des Problems der URL-Produktion im Yii-Framework

不言
不言Original
2018-06-19 13:54:451242Durchsuche

Eine Zusammenfassung der URL-Produktionsprobleme im yii-Framework, auf die sich Freunde in Not beziehen können.

Der Code lautet wie folgt:

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

Angenommen, die Konfiguration von UrlManager ist auf den Pfadmodus eingestellt und die Standardkonfiguration von Yii wird verwendet:

&#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;, 
), 
),

Was für eine Art Link erzeugen die beiden oben genannten Codezeilen eine Adresse?
http://0bf677d03126a8829d141e9c54ef1239/user/register //Falscher Link
http://0bf677d03126a8829d141e9c54ef1239/index.php/user/register //Richtiger Link
Nein . Wenn ein Link falsch ist, gibt der Browser einen 404-Fehler zurück. Der zweite Link greift auf die Register-Methode von UserController zu. Der Unterschied besteht darin, dass beim Generieren des zweiten Links der von uns übergebene Parameter ein Array ist, während die erste Methode eine einfache Zeichenfolge ist. Wenn Yii eine einfache Zeichenfolge verarbeitet, verwendet es diese direkt als endgültige URL. Wenn es auf ein Array trifft, ruft es die CreateUrl des Controllers auf, um die URL zu generieren Es gibt tatsächlich einen ganz wesentlichen Unterschied zwischen den beiden Links. Obwohl es sich auch um die Zeichenfolge „user/register“ handelt, stellt die erste Zeichenfolge einen 13-stelligen relativen Pfad dar, während der zweite Link die registerAction des UserControllers darstellt, die eine besondere Bedeutung hat.
Im Anhang finden Sie den Quellcode der URL-Verarbeitungsmethode 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; 
}

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist zur chinesischen PHP-Website!

Verwandte Empfehlungen:

Über die Verwendung der Yii-Paging-Komponente

Über YII mit dem Bootstrap-Paging-Stil

Analyse der Yii2.0-Tabellenzuordnungsabfrage

Das obige ist der detaillierte Inhalt vonLösung des Problems der URL-Produktion im Yii-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn