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' )
查看本欄目