zoukankan      html  css  js  c++  java
  • thinkphp5路由心得

    路由的作用:
    1. 简化URL地址,方便大家记忆
    2. 有利于搜索引擎的优化,比如可以被百度的爬虫抓取到

    优化URl
    1. 前后端分离
    修改入口文件,在public下新建admin.php文件,将下面的代码添加进入

    1 // 定义应用目录
    2  
    3 define('APP_PATH', __DIR__ . '/../application/');
    4  
    5 // 加载框架引导文件
    6  
    7 require __DIR__ . '/../thinkphp/start.php';

    2.绑定模块
    1)前后端分离实现的功能
    index.php 这个入口文件只能进入前台模块
    admin.php 这个入口文件只能进入后台模块
    2)绑定模块
    在index.php添加 define(‘BIND_MODULE’,’index’); 这样http://www.demo.com/index.php/只能访问前台模块。访问不了后台,http://www.yd.com/index.php/index/index
    在admin.php添加 define(‘BIND_MODULE’,’admin’); 这样http://www.demo.com/admin.php只能访问后台模块,访问不了前台,http://www.yd.com/admin.php/index/index
    3) 隐藏入口文件(怎么操作就不写了,可以看下文档里面的URL访问下 隐藏入口文件 的说明),这样访问前台模块可以省去index.php,可以用http://www.yd.com/index/index直接访问到


    关闭后台的路由
    在public下的admin.php中添加这句代码 hinkApp::route(false);

    // 定义应用目录
     
    define('APP_PATH', __DIR__ . '/../application/');
     
    //绑定后台
     
    define('BIND_MODULE','admin');
     
    // 加载框架引导文件
     
    require __DIR__ . '/../thinkphp/start.php';
     
     
     
    //关闭admin模块的路由,必须写到加载框架引导文件之后
     
    	hinkApp::route(false);

    路由的三种模式:
    1. 普通模式 :完全使用PASH_INFO来访问,比如http://www.yd.com/index.php/index/index,域名+模块+控制器
    2. 混合模式 :可以使用路由也可以不使用
    3. 强制模式 :必须使用路由


    设置路由

    一.动态单个设置

    在application下的route.php文件内更改

    1 use thinkRoute; //引入Route
    2  
    3 Route::rule('test','index/index/demo'); //当URL访问http://www.yd.com/test时,访问的是index模块下的index下的控制器下的demo方法

    路由形式:
    静态路由:Route::rule(‘test’,’index/index/demo’);
    带参数的路由: Route::rule(‘getid/:id’,’index/User/getId’);
    比如我访问http://www.yd.com/getid/7,或者http://www.yd.com/getid/8,或者http://www.yd.com/getid/9,就是getid后面带个参数

     1 //首先在index模块下的User控制器中写一个getId方法
     2  
     3 public function getId(){
     4  
     5 echo input('id'); //输出id
     6  
     7 }
     8  
     9 //然后在route.php加上这行代码
    10  
    11 Route::rule('getid/:id','index/User/getId');
    12  
    13 //最后当我们http://www.yd.com/getid后面加个数字,比如http://www.yd.com/getid/20,页面会显示20

    带多个参数路由,比如带两个参数

     1 //index模块下的User控制器中写一个myTime方法
     2  
     3 public function myTime(){
     4  
     5 echo input('year').' 年 '.input('month').'月'; //输出 n年n月
     6  
     7 }
     8  
     9 //然后在route.php加上这行代码
    10  
    11 Route::rule('time/:year/:month','index/User/myTime');
    12  
    13 //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月

    选择性带参数,就是我们在访问url时,URL后面可以带参数,也可以不带,在写路由文件上的参数带上中括号就行
    比如输出年或年月

     1 public function myTime(){
     2  
     3 echo input('year').' 年 '.input('month').'月'; //输出 n年n月
     4  
     5 }
     6  
     7 //然后在route.php加上这行代码
     8  
     9 Route::rule('time/:year/[:month]','index/User/myTime'); //重点:month外面加[]
    10  
    11 //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月
    12  
    13 //当我们访问http://www.yd.com/time/2018,页面会显示2018 年 月

    纯带参数的路由 不建议使用

     1 //路由写法
     2  
     3 Route::rule(':x/:y','index/User/XAndY');
     4  
     5 //方法
     6  
     7 public function XAndY(){
     8  
     9 echo input('x').' '.input('y');
    10  
    11 }
    12  
    13 //访问http://www.yd.com/5/3,页面输出5 3

    完全匹配路由 在路由的后面加个$符号

     1 public function comp(){
     2  
     3 echo '我是完全匹配路由';
     4  
     5 }
     6  
     7 //不加$符号,我们字comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面都能输出 我是完全匹配路由
     8  
     9 Route::rule('comp','index/User/comp');
    10  
    11  
    12  
    13 //加上$符号,我们在comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面不能输出方法的内容
    14  
    15 Route::rule('comp','index/User/comp');

    二.批量设置路由
    第一种写法,将上面所有单个动态注册的路由批量注册

     1 Route::rule([
     2  
     3 "test"=>"index/index/demo",
     4  
     5 'getid/:id'=>'index/User/getId',
     6  
     7 'time/:year/[:month]'=>'index/User/myTime',
     8  
     9 ':x/:y'=>'index/User/XAndY',
    10  
    11 'comp$'=>'index/User/comp'
    12  
    13 ],'','get');

    第二种方式,这里用get举例

     1 Route::get([
     2  
     3 "test"=>"index/index/demo",
     4  
     5 'getid/:id'=>'index/User/getId',
     6  
     7 'time/:year/[:month]'=>'index/User/myTime',
     8  
     9 ':x/:y'=>'index/User/XAndY',
    10  
    11 'comp$'=>'index/User/comp'
    12  
    13 ]);

    3.配置文件设置路由,使用配置文件批量注册,还是在route.php文件内写

     1 return[
     2  
     3 "test"=>"index/index/demo",
     4  
     5 'getid/:id'=>'index/User/getId',
     6  
     7 'time/:year/[:month]'=>'index/User/myTime',
     8  
     9 ':x/:y'=>'index/User/XAndY',
    10  
    11 'comp$'=>'index/User/comp'
    12  
    13 ];

    路由的请求方式
    TP里面有四种请求方式,GET,POST,PUT,DELETE四种方式,如果我们不指定请求类型,默认是*,所有的请求类型

    请求方式有两种写法,这里用get举例

    1 Route::rule('qtype','index/User/questType','get');
    2  
    3 Route::get('gtype','index/User/questType');

    既支持get有支持post的写法

    Route::rule('type','index/User/questType','get|post');

    全部请求方式都支持的两种写法

    Route::any('type','index/User/questType');
     
    Route::rule('type','index/User/questType','*');

    变量规则,Route::rule();的最后一个参数,是一个数组,可以指定多个参数,用正则表达式来写,用来规范传入的参数必须是什么数据类型,或者必须是那些数据等等,比如

    Route::rule('getid/:id','index/User/getId','get',[],['id'=>'d']);  //最后一个参数,表示id传参数必须是数字

    路由参数,Route::rule();的倒数第二个参数,是一个数组,可以用来指定请求的数据类型,也可以用来规定请求的URL后缀,比如

    Route::rule('getid/:id','index/User/getId','get',['method'=>'get','ext'=>'html'],['id'=>'d']);
     
    //请求方式必须是get,请求的后缀必须是html,访问的url为http://www.yd.com/getid/9.html,不带html后缀就请求失败

    资源路由,你的后台模块可能会有增删改查等操作,但是一个一个写太费劲,资源路由自动帮你生这些路由,你只需要在控制器内写这些方法,

    这里写图片描述

    比如

     1 //先创建block
     2  
     3 namespace appindexcontroller;
     4  
     5 class Block
     6  
     7 {
     8  
     9 public function index(){
    10  
    11 echo '我是前台模块下的block';
    12  
    13 }
    14  
    15 public function create(){
    16  
    17 echo '我是前台模块下的block的create方法';
    18  
    19 }
    20  
    21 public function read($id){
    22  
    23 echo $id;
    24  
    25 }
    26  
    27 }
    28  
    29 //然后在route.php下写上资源路由
    30  
    31 Route::resource('block','index/Block');
    32  
    33  
    34  
    35 //效果:
    36  
    37 //当你访问http://www.yd.com/block URL访问的是index方法
    38  
    39 //当你访问http://www.yd.com/block/15 URL访问的是read方法
    40  
    41 //当你访问http://www.yd.com/block/create URL访问的是create方法

    快捷路由
    在index模块下创建一个Fastroute控制器,里面写下如下例子,除了index,其他方法都要加上get

     1 namespace appindexcontroller;
     2  
     3 class Fastroute
     4  
     5 {
     6  
     7 public function index(){
     8  
     9 echo '我是Fast路由的index';
    10  
    11 }
    12  
    13 public function getAA(){
    14  
    15 echo "我是getAA";
    16  
    17 }
    18  
    19 public function getBB(){
    20  
    21 echo "我是BB";
    22  
    23 }
    24  
    25 public function postInfo()
    26  
    27 {
    28  
    29 }
    30  
    31  
    32  
    33 public function putInfo()
    34  
    35 {
    36  
    37 }
    38  
    39  
    40  
    41 public function deleteInfo()
    42  
    43 {
    44  
    45 }
    46  
    47 }

    在route.php里面写下快捷路由

    1 //注意:路由名字要和控制器名字一样
    2  
    3 Route::controller('Fastroute','index/Fastroute');
    4  
    5 //然后我们想访问getAA方法,我们可以通过访问URL http://www.yd.com/Fastroute/AA来访问
    6  
    7 //想访问getBB(),可以通过 http://www.yd.com/Fastroute/BB来访问
    8 1

    生成URL 两种方式,不太懂有什么用

    1 Url::build(‘index/User/index’);
    2 Url::build();
    3 
    4  
    5 Url::root('/index.php'); //带入口文件
    6  
    7 dump(Url('index/User/index'));
    8  
    9 dump(Url::build('index/User/index'));
  • 相关阅读:
    推荐一款超好用的工具cmder
    golang初探与命令源码分析
    LAMP环境部署物联网项目
    linux上安装LAMP笔记
    scrapy实战--爬取最新美剧
    scrapy实战--爬取报刊名称及地址
    scrapy简单入门及选择器(xpathcss)
    phantomJs页面截图
    eclipse工具的安装配置
    BeautifulSoup爬虫基础知识
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10716604.html
Copyright © 2011-2022 走看看