tp6框架路由使用

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

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


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [toc] 概述 由于ThinkPHP5.0默认采用的URL规则是: http://server/module/c...
    呦丶耍脾气阅读 12,657评论 0 1
  • thinkPHP5.0支持自定义路由和thinkPHP3.0之前的自动匹配路由 1.自动匹配路由 'url_rou...
    其实都没有_8881阅读 3,916评论 0 0
  • 本章我们先体验下什么是路由,以及路由带来的好处。 首先,我们先了解一下URL请求的执行流程: 那么,问题来了,为什...
    IUVO阅读 3,505评论 0 0
  • 注册路由规则 路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。 动态注册 路...
    fantasy_J阅读 2,642评论 0 2
  • 入口文件定义配置文件的位置: 我们在自定义配置目录下创建/config/config.php,写入配置: 默认模块...
    IUVO阅读 5,411评论 0 0