路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的URL请求地址更优雅,因为不会暴露实际的URL地址,也就意味着更安全,5.0的路由不仅仅只是支持路由到控制器的操作方法,甚至可以路由到任何的类或者闭包。 1、路由模式 路由可以理解为一种寻径功能模块,比如URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,下面就来说说如何通过路由简化URL访问。ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可以总结归纳为如下三种方式: 1.1、普通模式 关闭路由,完全使用默认的PATH_INFO方式URL: 'url_route_on' => false,
路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO 模式访问URL: http://域名/module/controller/action/param/value/...
1.2、混合模式 开启路由,并使用路由定义+默认PATH_INFO方式的混合: 'url_route_on' => true,'url_route_must'=> false,
该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照第一种普通模式的PATH_INFO模式访问URL。 1.3、强制模式 开启路由,并设置必须定义路由才能访问: 'url_route_on' => true,'url_route_must' => true,
这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
2、路由配置2.1、URL请求的执行流程:用户请求 -> 路由解析 -> 调度请求 -> 执行操作 -> 响应输出 2.2、路由规则写在哪里: * 路由规则写在与应用配置统计的route.php文件中 * 路由规则主要使用路由类Route::rule()方法注册
3、路由注册 路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。 3.1、动态注册和静态路由 现在给该URL地址定义一个新的路由规则如下: Route::rule('hello/:name','index/Index/hello');
现在我们来分析下rule方法的参数,第一个参数称为路由规则(通过路由访问的地址),第二个参数为该规则对应的路由地址(也就是原来定义路由之前访问的URL地址)。 路由规则通常可以包含变量(例如其中的:name就是一个路由变量),路由规则中包含变量(包括可选变量)的就称该条路由规则为动态路由,没有包含任何变量的路由我们称之为静态路由,例如:
// 静态路由规则Route::rule('hello','index/Index/hello');// 动态路由规则Route::rule('hello/:name','index/Index/hello');
注:ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。并且原来的访问地址会自动失效。 4、路由绑定 一、入口绑定
入口文件绑定模块后,再定义路由规则,就不需要加模块名称了。 // [ 修改应用入口文件 ]public/index.php//绑定admin模块
define('BIND_MODULE', 'admin');//可以绑定模块及控制器
// 给登录url定义路由route.php
Route::rule('login', 'Login/index');
注意: define(‘BIND_MODULE', ‘index/index');绑定到控制器时,控制器名称index要小写,大写会post不成功。。。 二、入口自动绑定
说明:入口文件名与应用中的模块自动绑定
1、入口自动绑定模块设置: 'auto bind module' => true,//修改config.php配置项。
2、创建要需要绑定的入口文件,例如: admin.php
3、创建与入口文件对应的模块与控制器:application/admin/controller/Index.php,并创建默认index()方法
4、直接访问:域名/admin.php,就会自动执行admin模块中默认控制器中的默认方法啦
三、动态绑定
语法:Route::bind('模块[/控制器]/操作]')
//修改route.php,使用think/Route类下的bind()方法。
1、绑定当前的URL到模块
Route::bind('模块');
2、绑定当前的URL到模块下面的控制器
Route::bind('模块/控制器');
3、绑定当前的URL到模块下面的控制器中的指定操作
Route::bind('模块/控制器/操作'):
四、绑定到命名空间或者类//修改route.php,使用think/Route类下的bind()方法。1、绑定当前的URL到指定命名空间
Route::bind('app\index\controller','namespace');此前,所有采用该命名空间的类,都可以直接访问
2、绑定当前的URL到类
Route::bind('app\index\controller\Demo','class'):此前,所有Demo类中的方法,可以直接访问
特别注意:这种绑定形式会直接跳过模块配置文件和公共文件。
|