站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
ThinkPHP开发指南-控制器之URL路由
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>导航:</strong>[[ThinkPHP开发指南-控制器|返回上一页]]</span> <div style="clear:both;"></div> [[ThinkPHP]]支持[[URL]]路由功能,要启用路由功能,需要设置URL_ROUTER_ON 参数为true。开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。路由功能需要定义路由定义文件,位于项目的配置目录下面,文件名为routes.php, '''定义格式:''' <pre> return array( // 第一种方式 常规路由 'RouteName'=>array('模块名称', '操作名称', '参数定义', '额外参数'), // 第二种方式 泛路由 'RouteName@'=>array array('路由匹配正则', '模块名称', '操作名称', '参数定义', '额外参数'), ), …更多的路由名称定义 ) </pre> 系统在执行Dispatch解析的时候,会判断当前URL是否存在定义的路由名称,如果有就会按照定义的路由规则来进行URL解析。例如,我们启用了路由功能,并且定义了下面的一个路由规则: <pre> 'blog'=>array('Blog', 'archive', 'year,month,day', 'userId=1&status=1') </pre> 那么我们在执行 <nowiki>http://<serverName>/appName/blog/2009/10/1/ </nowiki>的时候就会实际执行Blog模块的archive操作,后面的参数/2009/10/1/ 就会依次按照 year/month/day 来解析,并且会隐含传入userId=1和status=1 两个参数。另外一种路由参数的传入是<nowiki>http://<serverName>/appName/?r=blog&year=2009&month=10&day=1</nowiki>,会执行上面相同的路由解析,该方式主要是提供不支持PATHINFO方式下面的兼容实现。其中r由VAR_ROUTER参数定义,默认是r。 *如果需要路由到分组模块的话,可以定义成 <pre> 'blog'=>array('Home.Blog', 'archive', 'year,month,day', 'userId=1&status=1') </pre> 就可以指定路由到Home分组的Blog模块。 '''泛路由支持''' 泛路由指的是对同一个路由名称提供了多个规则的支持,使得URL的设置更加灵活,例如,我们对Blog路由名称需要有多个规则的路由: <pre> 'Blog@'=array( array('/^/(d+)(/p/d)?$/','Blog','read','id'), array('/^/(d+)/(d+)/','Blog','archive','year,month'), ), </pre> *第一个路由规则表示解析 Blog/123 这样的URL到Blog模块的read操作 *第二个路由规则表示解析 Blog/2009/10 这样的URL到Blog模块的archive操作 '''泛路由'''的定义难度就在路由正则的定义上面,其它参数和常规路由的使用一致。举个简单路由的例子,如果我们有一个City模块,而我们希望能够通过类似下面这样的URL地址来访问具体某个城市的操作:<nowiki>http://<serverName>/index.php/City/shanghai/ </nowiki>shanghai这个操作方法是不存在的,我们给相关的城市操作定义了一个city方法,如下: '''PHP代码''' <pre> Class CityAction extends Action{ public function city(){ // 读取城市名称 $cityName = $_GET['name']; Echo ('当前城市: '.$cityName); } } </pre> 这样,URL里面所有的City模块都会被路由到City模块的city操作,而后面的第二个参数会被解析成 $_GET['name'] 接下来,我们就可以在[[浏览器]]里面输入 <pre> http://<serverName>/index.php/City/beijing/ http://<serverName>/index.php/City/shanghai/ http://<serverName>/index.php/City/shenzhen/ <pre> 会看到依次输出的结果是: <pre> 当前城市:beijing 当前城市:shanghai 当前城市:shenzhen </pre> [[category:ThinkPHP]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)