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 行のコードでリンクが生成されますか?
http://0bf677d03126a8829d141e9c54ef1239/user/register //間違ったリンク
http://0bf677d03126a8829d141e9c54ef1239/index.php/user/register //正しいリンク
リンクが間違っていると、ブラウザは 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; }以上がこの記事の全内容です。その他の関連コンテンツについては、こちらをご覧ください。 PHP 中国語 Web サイトに注意してください。 関連する推奨事項:
ブートストラップ ページング スタイルを使用する yii について
##
以上がYiiフレームワークでのURL生成の問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。