ThinkPHP 空操作实现URL伪静态
首先看一下ThinkPHP的控制器
ThinkPHP采用模块和操作的方式来执行
http://servername/appName/moduleName/actionName/params
执行的项目(appName)、模块(moduleName)和操作(actionName),appName可以不需要,通常是网站的首页,因为项目名称可以在入口文件中指定,这种情况下,appName就会被index.php替代 ,而ThinkPHP提供的URL_MODEL 的2模式 URL重写,可以去掉index.php,让你的URL看上去更友好。
官方手册:
【quote】每个模块是一个Action文件,类似于我们平常所说的控制器,系统会自动寻找项目类库Action目录下面的相关类,如果没有找到,则会定位到空模块,否则抛出异常。
而actionName操作是首先判断是否存在Action类的公共方法,如果不存在则会继续寻找父类中的方法,如果依然不存在,就会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出。【/quote】
来看下ThinkPHP的URL伪静态实例
可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置URL_HTML_SUFFIX 为 .shtml 的话,我们可以把下面的URL
http:///Blog/read/id/1
变成
http:///Blog/read/id/1.shtml
后者更具有静态页面的URL特征,但是具有和前面的URL相同的执行效果,并且不会影响原来参数的使用
来看下手册上空操作的实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Class CityAction extends Action{ Public function _empty(){ $cityName=ACTION_NAME; $this->city($cityNmae); } Protected function city($name){ Echo('当前城市:'.$name); } } |
好吧,现在我们在浏览器中输入
http://servername/City/beijing http://servername/City/shanghai http://servername/City/shenzhen
会看到依次显示输出
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen
OK,和用URL路由定义的效果是一样的,但是不需要定义路由定义文件。
由此,想到的可以做些URL美化。
实现–》
前台模板文件文件:
<a href="__APP__/news/{$row.url}">{$row.title}</a>当然,url与title都是从数据库中读去出来的。
来看下控制器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public function _empty(){ $url=ACTION_NAME; $News=M("News"); $condition['url']=$url; $temp=M("News")->where($condition)->find(); $this->assign('temp',$temp); $this->display(newsshow); } |
当然, 我这只是简写了,实际还要判断下url为空或其它的.
好了,现在我们可以随意在数据库中插入想要的URL了,例如:
2009news.shtml 2009.html
等一些静态页面特征的url ,是不是很好玩儿。 ThinkPHP的强大之处就是还有更好玩儿的呢, 哈。 好好学习,天天向上。
本日志所应用实例:
www.wenan8.com/news
Recent Comments