路由配置相关:
配置开启config目录下的app.php,启用路由
'with_route' => true,
配置开启config目录下的route.php,强制使用路由。
'url_route_must' => true,
从安全角度考虑,建议使用强制模式;因此需要给所有的功能页面都定义路由。
值得注意的是,当使用了强制路由后,url跳转必须要有控制器/方法,不然会报错,没有使用了强制路由之前,同一个控制器的方法是可以默认匹配到的,不需要特意指定控制器,而现在不行了。
tp框架的三种路由模式:
-
1.普通模式
关闭路由
'with_route' => true,
当路由关闭后,不会解析任何路由规则,完全使用默认的PATH_INFO方式URL:
- 2.混合模式
配置开启config目录下的app.php,启用路由
'with_route' => true,
配置开启config目录下的route.php,不使用强制路由。
'url_route_must' => false,
混合模式下使用路由并使用路由定义,默认是PATH_INFO方式的混合,在混合模式下,只需要对需要定义路由规则的地址定义路由规则,其它的任然是按照普通模式的PATH_INFO模式进行访问URL
- 3.强制模式
开启路由,并且设置必须定义路由才能访问
'with_route' => true,
'url_route_must' => true,
路由使用:
引入门面资源
use think\facade\Route;
注册路由,定义rule规则(路由表达式+路由地址+请求类型声明)
Route::rule('new/:id','News/read','get | post')
使用了路由定义后,原网页的访问地址失效。
直接指定请求声明(推荐使用):定义get或者post请求类型路由规则
Route::get('showdetail/<mid>$','Index/detail');
Route::post('showdetail/<mid>$','Index/detail');
路由表达式参数支持2种格式写法,冒号和尖括号。
Route::get('show/:mid','Index/detail')
Route::post('showdetail/<mid>','Index/detail');
可选参数表达2种:问号形式和中括号形式
Route::get('showmes/<sid?>$','Index/view');
Route::get('showmes/[:sid]>','Index/detail')
路由表达式有3种:
Route::get('show/:mid') 动态+静态表达式(常用)
Route::get('show') 纯静态表达式
Route::get(':mid') 纯动态表达式
tp6框架的路由定义很灵活定,可以这样定义表达式
Route::get(':mid/show')
路由表达式加上$结束符,指定路由精确匹配,不是模糊匹配
Route::get('TPforum$','Index/index');
关于关于MISS全局路由的使用:
MISS全局路由一般是用来解决如下这种情况的。
当没有匹配到路由规则后,单独注册一个MISS路由,用来跳出页面报错这种情形。
MISS全局路由一般搭配空控制器(Error.php)使用
config目录下route.php查询空控制器配置信息:
使用空控制器:在控制器目录下创建Error.php
定义空控制器Error.php
<?php
//空控制器
namespace app\qinfb_forum\controller;
use think\Request;
class Error extends \app\BaseController { //继承
//定义miss方法
public function miss(){
$this -> error('你访问的网页不存在!','Index/index');
}
}
在路由匹配中使用:
<?php
use think\facade\Route;
Route::miss('public/miss');
效果:进行页面跳转,而不是停留在报错页面。
网友评论