Thinkphp是php的框架之一,目前也比较火热!
路由(route)是Thinkphp框架中的一个知识点,它的作用是可以让url网址访问变的简洁,规范。同时也可以将较长的ulr网址变得更加简短,方便记忆和访问!
开启路由的方式:
定义路由的方式:
在此目录文件下定义路由,以及路由所对应的位置,比如:
rule():是指定路由名对应路由位置的一种方式
1.普通路由:
当路由为空时,会调用Address控制器下的sex方法!
Route::rule('路由名','路由对应的位置');
示例 : Route::rule('as','Address/sex');
定义了该路由后,当用户在网址处输入as时,将会自动调用Address控制器下的sex方法!
2.传参路由:
Route::rule('路由名/:name','控制器/方法名');
当Address控制器下的name方法中需要传参时,我们可以在定义路由时给其加上:name,这里定义的:name值,必须跟方法中的参数名对应,并且在网址处调用时给其传递name值,该值会被替换方法中的$name变量!
比如:
1.定义路由:
2.调用路由:
路由中的请求类型一共有六种:
get:仅支持get类型 对应的快捷方式:get
post:仅支持post类型 对应的快捷方式:post
put:仅支持put类型 对应的快捷方式:put
delete:仅支持delete类型 对应的快捷方式:delete
patch:仅支持patch类型 对应的快捷方式:patch
*:支持任何类型 对应的快捷方式:any
路由注册方法的用法为:
使用示例如下:
其中的<id> 等于:id,都是同样的效果
rule():中的第三个参数为请求该路由的类型为POST,不指定的话默认为任何请求类型都有效
同时也可以定义多种请求方式,要么为GET或为POST
静态地址跟动态地址的结合:
当控制器下的方法中有多个参数需要传递值时,可以通过定义路由时给其用同样的方式定义多个动态值,然后在url处调用时,只需传递对应的参数即可
最终效果:
完全匹配:$
完全匹配的区别在于路由的后面是否加上$
Route::rule('Ax/:id','Address/xx'); 当在url中网址中调用Ax/1/wxh,也能执行
Route::rule('Ax/:id$','Address/xx'); 当在url网址中调用Ax/1/wxh,不能执行,因为加了$
$符是正则表达式中的一种规则,它规定了$符后面不能在跟任何东西
额外传参:->append(['']):
作用是:在定义路由时,同时定义好参数,在url网址处调用路由时,可传递一个假参数,这样能够起到一定的安全防护
示例:
定义xx方法中的id为5,在调用路由时传参会被转换
好像必须传递一个值,但它默认是用append里定义的那个值
闭包路由:
当调用Ax路由时会执行该函数!
->pattern(['']):的使用
pattern的作用是可以限制某个变量的数据类型
示例如下:
其中的\d+是正则表达式中的数字型,规定id的类型为数字型
该定义方式为局部定义,仅在当前路由有效:
表示Ax/:id对应的是Address控制器下的xx方法,传id参数时,只能传数字类型
全局变量类型定义方式:
设置全局变量规则,全部路由有效:
pattern('id' => '\d+'): \d是正则中的表达式,表示id的数据类型必须为数字
动态路由:
顾名思义,动态路由的意思是路由名跟对应的路由位置都是动态的,比如:
该路由中对应的控制器位置也是动态的,其中的name是跟随路由名中的name对应的,也就是说在url网址中给name传的啥值,它就会跟控制器名进行拼接,最后去找对应的控制器及方法
比如说:
它就会去找helloWorld控制器中的hello方法
多级控制器的路由定义方式:
bd/:id对应的是group文件夹下的Blog控制器中的details方法
路由中的重定向: redirect()
当在url网址处输入XG时,会跳到参数二中的网址去
路由参数:
-> ext('html'):规定后缀名必须为html
其他的用法都差不多,相信聪明的你们已经会了
路由的分组:
所谓的路由分组就是将多个路由放入一个组内方便进行管理!
如上的意思是定义一个group组来管理两个分别对应不同位置的路由,其中Ax代表路由的名,在url网处输入Ax/id值时,它会自动对应Address/xx下的方法
如下给多个路由进行路由参数的话,可以将他们放入一个组中,只需在组后添加路由参数即可,
无需在给每个路由一一填上路由参数
全局MISS路由:
MISS路由的意思是如当调用一个不存在的路由时,会自动调用如下闭包
以上便是我总结的关于Thinkphp6中路由的知识点,希望能帮助大家!