美文网首页
tp6框架路由使用

tp6框架路由使用

作者: 似朝朝我心 | 来源:发表于2021-11-25 23:03 被阅读0次

    路由配置相关:
    配置开启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');
    

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


    相关文章

      网友评论

          本文标题:tp6框架路由使用

          本文链接:https://www.haomeiwen.com/subject/wyjztrtx.html