yii フレームワークでの URL 生成の問題の概要。困っている友人は参照できます。
コードは次のとおりです:
<?php echo CHtml::link('错误链接','user/register')?> <?php echo CHtml::link('正确链接',array('user/register'))?>
UrlManager の構成が Path モードに設定され、yii のデフォルト構成が使用されると仮定します:
'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ),
上記の 2 行のコードでリンクが生成されますか? ブートストラップ ページング スタイルを使用する yii について ## 以上がYiiフレームワークでのURL生成の問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
http://
http://
リンクが間違っていると、ブラウザは 404 エラーを返します。 2 番目のリンクは、UserController の Register メソッドにアクセスします。違いは、2 番目のリンクが生成されるときに渡すパラメーターが配列であるのに対し、最初のメソッドは単純な文字列であることです。 Yii が URL を処理するとき、単純な文字列に遭遇すると、その文字列を最終的な URL として直接使用し、配列に遭遇すると、コントローラーの CreateUrl を呼び出して URL を生成します。実際、2 つのリンクの間には非常に本質的な違いがあります。これらも文字列「user/register」ですが、最初の文字列は 13 文字の相対パスを表し、2 番目のリンクは特別な意味を持つ UserController の registerAction を表します。
Yii の URL 処理メソッド、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('post/list', 'page'=>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='';
}
return $url==='' ? Yii::app()->getRequest()->getUrl() : $url;
}