《PHP实例:ThinkPHP路由详解》要点:
本文介绍了PHP实例:ThinkPHP路由详解,希望对您有用。如果有疑问,可以联系我们。
相关主题:thinkphp教程
PHP应用有了基本配置,我们就可以来拜访我们的应用默认首页了.进入到项目目录,可以直接使用PHP内置服务器来开始拜访,比如:
PHP应用
php -S localhost:8999
PHP应用浏览器输入localhost:8999就可以看到ThinkPHP的默认首页了:一个笑脸.
PHP应用在这里,我们拜访到的是ThinkPHP自带的默认入口文件index.php也就是拜访到的是IndexController的index()方法,这是因为ThinkPHP默认设置:
PHP应用
'DEFAULT_CONTROLLER' => 'Index'
PHP应用如果你查看过ThinkPHP/Conf/convention.php文件,应该就会明白这个其实便是设置默认的控制器.
PHP应用关于控制器(Controller)我们后面会仔细说
PHP应用了解这些基本知识之后,那么如果我们需要拜访其它的页面,拜访其他的控制器和方法呢?答案就在本节的路由教程中.
PHP应用路由定义规则
PHP应用在使用路由之前,确保你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能)并且确认已开启一下的路由设置:
PHP应用
'URL_ROUTER_ON' => true
PHP应用这里涉及到两个设置项,PATH_INFO和URL_ROUTER_ON,这些在ThinkPHP/Conf/convention.php文件都可以找到.
PHP应用在满足以上两个条件之后,就可以配置路由规则了.在配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,其格式为: '路由表达式'=>'路由地址和传入参数'每个元素都代表一个路由规则,好比:
PHP应用
'URL_ROUTE_RULES'=>array(
'blogs/:year/:month/:day' => array('Index/archive', 'status=1'),
'blogs/:id' => 'Index/read',
),
PHP应用ThinkPHP按定义的顺序依次匹配路由规则,一旦匹配到的话,就会定位到路由定义中的控制器和操作办法去执行(你可以传入其他的参数),而后面的规则不会继续匹配
PHP应用以上的路由配置说明:在每个路由表达式中,:后面跟参数名称,比如上面的:year,:month,:id都是参数名称,以:id为例,它指向Index控制器的read办法,这个办法接受一个$id的参数:
PHP应用
public function read($id){
echo "read page with" .$id;
}
PHP应用在浏览器输入http://localhost:8999/index.php/Home/blogs/2就可以看到
PHP应用
read page with 2
PHP应用Home就代表Home模块,你可以简单地将它映射到相应的Home目录,这是由于在默认的配置中
PHP应用
'DEFAULT_MODULE' => 'Home'
PHP应用你可以根据本身的需求修改,但本课依旧采用默认的Home模块.
PHP应用如果你还必要传人额外的参数,像第一条的规则array('Index/archive', 'status=1')中的status一样传人,你看设置多个这样的参数.
PHP应用如果你尝试在浏览器输入:
PHP应用http://localhost:8999/index.php/Home/blogs/string
PHP应用ThinkPHP也给我们返回了string,但在日常的开发中,我们通常必要限制:id变量是整数,那该怎么做呢?只必要稍稍改动就可以了,写成
PHP应用
'blogs/:id\d' => 'Index/read',
PHP应用以上\d表示限制变量id只能是数字.
PHP应用对于可选参数,可以用[]包括表示,比如:
PHP应用
'blogs/:year/:month/[:day]' => array('Index/archive', 'status=1'),
PHP应用上面的day现在便是可选参数了,你可以传人,也可以不传.
PHP应用在ThinkPHP中,还支持在限制路由的后缀和使用正则路由.
PHP应用限制路由后缀,通常使用在平时常见的html,htm等后缀,还是以上面的规则为例:
PHP应用
'blogs/:id' => array('Index/read',array('ext'=>'html'))
PHP应用你就可以限制这条规则只能在.html的路由后缀生效.
PHP应用正则路由
PHP应用正则自己就是一门很大的学问,在学习ThinkPHP的正则路由之前,最好是具备一定的正则表达式的基础.
PHP应用路由表达式支持的正则定义必须以/开头,否则就视为规则表达式,好比:
PHP应用
'#^blog\/(\d+)$#' => 'Index/read'
PHP应用这会解析为规则路由而不是正则路由,因为录音表达式并没有以/开始,所以,我们必要这样写:
PHP应用'/^new\/(\d{4})\/(\d{2})$/' => 'Index/achive?year=:1&month=:2',
以上就是一条正确的正则路由.对于正则表达式中的每个正则规则子模式)部分(如\d{4}和\d{2}),如果必要在后面的路由地址中引用,可以采用:1、:2这样的方式,序号就是子模式的序号
PHP应用静态路由
PHP应用ThinkPHP框架其实还有一个路由机制叫静态路由,这实际上就是规则路由的静态简化版,路由定义中不包括动态参数(如上面的路由规则中id参数),静态路由不需要遍历路由规则而是直接定位,因此执行效率会较高.静态路由采用URL_MAP_RULES来定义规则:
PHP应用
'URL_ROUTER_ON' => true,
'URL_MAP_RULES'=>array(
'new/top' => 'Index/top?type=top'
)
PHP应用由于Index/top?type=top中Index表示控制器,第一个top表示办法,所以我们需要在Index控制器中创建top办法:
PHP应用
public function top(){
echo "top page </br>";
}
PHP应用根据上面这条规则,如果我们拜访到
PHP应用http://localhost:8999/index.php/Home/new/top
PHP应用其实我们拜访的是:
PHP应用http://localhost:8999/index.php/Home/index/top/type/top
转译成就是new/top对应的是index控制器的top办法,传人的参数为type,参数值为top,所以就有了index/top/type/top
PHP应用但是,当我们拜访http://localhost:8999/index.php/Home/new/top/var/test尽管URL地址前面也有new/top,然而由于静态路由是完整匹配的性质,所以不会匹配到index/top/type/top
PHP应用以上所述便是本文的全部内容了,希望大家能够喜欢.
维易PHP培训学院每天发布《PHP实例:ThinkPHP路由详解》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/9411.html