5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8048|回复: 2
打印 上一主题 下一主题

[TP5学习] 4 路由定义

[复制链接]

670

主题

785

帖子

8343

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8343
跳转到指定楼层
楼主
发表于 2019-5-23 09:34:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
app下有个route.php,路由配置文件,可以用来简化路径。通过简化路径可以让访客猜不到真实模块所在的文件夹。

关于路由,这里有个手册写的很详细,图文式,容易理解 https://www.kancloud.cn/ldkt/tp5_route 售价9.9,不是我写的哈,试读可以看一部分内容

一、单参数

比如写一个
  1.     'qss/[:name]'     => ['index/index/qss', ['method' => 'get','ext' => 'html']],
复制代码


在控制器index.php里写

  1.     public function qss($name='qss')
  2.     {
  3.         return 'qss方法的name='.$name;
  4.         print_r($this->request->param()); //打印接收到的全部参数
  5.     }
复制代码


就可以访问 /qss/123.html 得到结果了,实际原始路径是/index/index/qss/name/123


这里的[:name]的中括号表示,参数可以有,也可以无。如果去掉中括号,则必须要有参数。

'ext' => 'html' 意思是,必须是.html后缀,不加也不认

二、多参数改分隔符
如/index/index/qss2/aaa/111/bbb/222/ccc/333.html
希望改成 /qss/aaa/ddd-333-ccc-444-eee-555.html

*URL分隔符,在config.php里找到  pathinfo_depr 把 '/' 改 '-' 即可


三、日期正则

  1. public function today($year='2019',$month='05')
  2. {
  3.         echo "今天是$year年$month月";
  4. }
复制代码


如访问 /index/index/today/year/2019/month/05
想改为 /today/2019/05.html

路由配置如下

  1. 'today/:year/:month' =>['index/index/today',['method'=>'get'],['year']=>'\d{4}','moth'=>'\d{2}']],
复制代码


正则匹配为年必须4位数字,月必须2位数字,否则不认,正则相关知识请另外学习

如果加上[]号,就是选填,可以访问/today 不报错
  1. 'today/[:year]/[:month]' =>['index/index/today',['method'=>'get'],['year']=>'\d{4}','moth'=>'\d{2}']],
复制代码










回复

使用道具 举报

670

主题

785

帖子

8343

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8343
沙发
 楼主| 发表于 2019-5-28 12:24:30 | 只看该作者
URL生成

*控制器里
要先引入
  1. use think/Url;
复制代码


然后

  1. public function url(){
  2.         echo Url::build('url2','a=1&b=2');
  3.         echo "<br/>";
  4.         echo url('url2','a=1&b=2'); //简洁方式
  5.         echo "<br/>";
  6.         echo url('url2',['a'=>1,'b'=>2]); //数组方式
  7.         echo "<br/>";
  8.         echo url('url2',array('a'=>1,'b'=>2)); //数组方式
  9.         echo "<br/>";
  10.         echo url('admin/index2/url2','a=1&b=2');
  11.         echo "<br/>";
  12.         echo url('admin/HelloWorld/hello'); //自动切换url_convert 其他控制器的
  13.         echo "<br/>";
  14.         echo url('today/2019/06'); //路由规则里的
  15. }

  16. public function url2(){
  17.         print_r($this->request->param());
  18. }

复制代码


生成结果

  1. /index/index/url2/a/1/b/2.html
  2. /index/index/url2/a/1/b/2.html
  3. /index/index/url2/a/1/b/2.html
  4. /index/index/url2/a/1/b/2.html
  5. /admin/index2/url2/a/1/b/2.html
  6. /admin/hello_world/hello.html
  7. /today/2019/06.html
复制代码

回复 支持 反对

使用道具 举报

670

主题

785

帖子

8343

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8343
板凳
 楼主| 发表于 2019-5-28 12:29:31 | 只看该作者
总结
1、参数绑定
2、url大小写主义
3、当不支持pathinfo怎么办
4、apache或nginx隐藏index.php,伪静态方式
5、定义路由规则、复杂路由
6、url参数分隔符,网址后缀.html修改
7、生成URL地址
8、路径访问原理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2025-8-13 03:59 , Processed in 0.062500 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表