tp6框架路由使用

2021-11-25  本文已影响0人  似朝朝我心

路由配置相关:
配置开启config目录下的app.php,启用路由

    'with_route'       => true,

配置开启config目录下的route.php,强制使用路由。

    'url_route_must'        => true,

从安全角度考虑,建议使用强制模式;因此需要给所有的功能页面都定义路由。

值得注意的是,当使用了强制路由后,url跳转必须要有控制器/方法,不然会报错,没有使用了强制路由之前,同一个控制器的方法是可以默认匹配到的,不需要特意指定控制器,而现在不行了。



tp框架的三种路由模式:

    'with_route'       => true,

当路由关闭后,不会解析任何路由规则,完全使用默认的PATH_INFO方式URL:


配置开启config目录下的app.php,启用路由

    'with_route'       => true,

配置开启config目录下的route.php,不使用强制路由。

    'url_route_must'        => false,

混合模式下使用路由并使用路由定义,默认是PATH_INFO方式的混合,在混合模式下,只需要对需要定义路由规则的地址定义路由规则,其它的任然是按照普通模式的PATH_INFO模式进行访问URL

开启路由,并且设置必须定义路由才能访问

    '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');

效果:进行页面跳转,而不是停留在报错页面。


上一篇下一篇

猜你喜欢

热点阅读