1關於TP中空操作和路由問題
<?php
function test(){
$content="test demo @雲峰天下";
$pattern='/@(\S+)\s/';
$content=preg_replace($pattern,'<a href="'.__APP__.'/user/index/uname/\\1">\\1</a>');
return $content;
}
最近在做一個微博,有一塊是微博內容@用戶加鏈接,跳轉到用戶頁,剛開始感覺沒什麼難的,可以通過正則替換實現。
就像上面一樣,將用戶名使用get傳值帶到相應的控制器下面的方法下去。但是url確實太長,看了下視頻中的介紹,使用了
空操作和路由進行了處理。
<?php
function test(){
$content="test demo @雲峰天下";
$pattern='/@(\S+)\s/';
$content=preg_replace($pattern,'<a href="'.__APP__.'/user/\\1">@\\1</a>');
return $content;
}
將代碼進行修改後如上,修改後鏈接是這樣:<a href="localhost/weibo/user/雲峰天下">@雲峰天下</a>,但是user控制器下是沒有這個方法的?
最後看完視頻感覺tp挺強大的,是通過定義一個空操作和通過用戶名獲取用戶id,再通過配置路由從而實現簡化路由
/**
* 空操作
*/
function _empty($name){
$this->_getUrl($name);
}
/**
* 處理用戶名空操作,獲得用戶ID,跳轉至用戶個人頁
*/
private function _getUrl($name){
$where=array('username'=>$name);
$uid=M('userinfo')->where($where)->getField('uid');
if(!$uid){
redirect(U('Index/index'));
}else{
redirect(U('/'.$uid));
//redirect(U('index',array('uid'=>$uid)));
}
}
在上面中由於是訪問user下的每個用戶名作為方法,會執行_empty()方法,該方法下調用私有方法_getUrl(),跳轉到localhost/weibo/index.php/4(用戶id號),由於該模塊不存在,因此需要通過配置文件中的路由配置實現,如下
//URL路由配置
'URL_ROUTER_ON'=>true, //開啟路由功能
'URL_ROUTE_RULES'=>array( //定義路由規則
':id\d'=>'User/index'
)
查看本欄目