首页 > PHP > ThinkPHP 空操作实现URL伪静态

ThinkPHP 空操作实现URL伪静态

2009年12月3日 admin 发表评论 阅读评论

首先看一下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")-&gt;where($condition)-&gt;find();
 
$this-&gt;assign('temp',$temp);
 
$this-&gt;display(newsshow);
 
}

当然, 我这只是简写了,实际还要判断下url为空或其它的.

好了,现在我们可以随意在数据库中插入想要的URL了,例如:

2009news.shtml 2009.html

等一些静态页面特征的url ,是不是很好玩儿。 ThinkPHP的强大之处就是还有更好玩儿的呢, 哈。 好好学习,天天向上。

本日志所应用实例:

www.wenan8.com/news

分类: PHP 标签: , ,