ThinkPHP中U方法的用處主要是完成對url地址的組裝,在模板中使用U方法而不是固定寫死URL地址的好處在於,一旦你的環境變化或者參數設置改變,你不需要更改模板中的任何代碼。在模板中的調用格式需要采用 {:U('地址', '參數'…)} 的方式,一般的形式里面是控制器中的方法名,例如{:U('loginPage')}。完整格式為:
U('地址','參數','偽靜態','是否跳轉','顯示域名')。U方法的第二個參數支持傳入參數,支持數組和字符串兩種定義方式,如果只是字符串方式的參數可以在第一個參數中定義,下面幾種方式都是等效的:
U('Blog/cate',array('cate_id'=>1,'status'=>1)) U('Blog/cate','cate_id=1&status=1') U('Blog/cate?cate_id=1&status=1')
但是不允許使用下面的定義方式來傳參數:
U('Blog/cate/cate_id/1/status/1')
根據項目的不同URL設置,同樣的U方法調用可以智能地對應產生不同的URL地址效果,可以在配置文件convention.php中看到:
'URL_MODEL' => 1, // URL訪問模式,可選參數0、1、2、3,代表以下四種模式: // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默認為PATHINFO 模式,提供最好的用戶體驗和SEO支持
1.普通模式:也就是傳統的GET傳參方式來指定當前訪問的模塊和操作,例如:(m參數表示模塊,a操作表示操作)
http://localhost/app/?m=module&a=action&var=value
2.PATHINFO模式:是系統的默認URL模式,提供了最好的SEO支持,系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。對應上面的URL模式,PATHINFO模式下面的URL訪問地址是:
http://localhost/app/index.php/module/action/var/value
3.REWRITE模式:是在PATHINFO模式的基礎上添加了重寫規則的支持,可以去掉URL地址里面的入口文件index.php,但是需要額外配置WEB服務器的重寫規則。
如果是Apache則需要在入口文件的同級添加.htaccess文件,內容如下:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
接下來,就可以用下面的URL地址訪問了:
http://localhost/app/module/action/var/value/
可以看到index.php被隱藏了
4.兼容模式:是用於不支持PATHINFO的特殊環境,地址為:
http://localhost/app/?s=/module/action/var/value/
兼容模式配合Web服務器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。