ThinkPHP5.0框架开发--第4章 TP5.0路由

第4章 TP5.0 路由

==================================================

上次复习

1、配置文件

1、惯例配置

2、应用配置

3、扩展配置

4、场景配置

5、模块配置

6、动态配置

2、获取配置

1、Config

config::get();

2、config方法

config();

3、配置文件加载顺序

惯例配置>应用配置>扩展配置>场景配置>模块配置>动态配置

4、环境配置

1、配置到根目录.env文件

2、读取

Env::get('名字','默认值');

==================================================

今日学习

1、路由作用:

1、简化URL地址,方便大家记忆

2、有利于搜索引擎优化

2、入口文件:

1、前后台分离

a、在网站public目录下(C:\AppServ\www\tp5\public) 新建admin.php

b、打开admin.php

<?php

// 定义应用目录

define('APP_PATH', __DIR__ . '/../application/');

// 加载框架引导文件

require __DIR__ . '/../thinkphp/start.php';

2、绑定模块

1、实现功能

index.php 这个入口文件 只能去前台模块

admin.php 这个入口文件 只能去后台模块 #建议后台的入口文件稍微复杂一些

2、如何实现

在入口文件中

define("BIND_MODULE",'index'); # 绑定前台模块

                            define("BIND_MODULE",'admin'); # 绑定后台模块

3、URL地址发生改变

1、入口绑定之前

http://www.tp.com/admin.php/模块/控制器/方法

2、入口绑定之后

http://www.tp.com/admin.php/控制器/方法

3、隐藏入口文件

1、开启apache的重写(C:\AppServ\Apache24\conf\httpd.conf)

# 把注释开启

LoadModule rewrite_module modules/mod_rewrite.so

2、设置访问权限 (C:\AppServ\Apache24\conf\extra\httpd-vhosts.conf)

<VirtualHost *:80>

DocumentRoot "C:\AppServ\www\tp5\public"

ServerName www.tp5.com

<Directory "C:\AppServ\www\tp5\public">

Options Indexes FollowSymLinks

AllowOverride All

Require all granted

</Directory>

</VirtualHost>

3、入口文件,在网站public目录下新建.htaccess 文件

         原理是正则

<IfModule mod_rewrite.c>

Options +FollowSymlinks -Multiviews

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>

4、重启服务

5、url地址变化

1、隐藏之前

http://www.tp.com/index.php/Index/test

2、隐藏之后

http://www.tp.com/Index/test

3、Tp5.0路由学习注意:

1、支持三种方式URL解析规则

2、路由只针对应用不针对模块,因此路由的设置也是针对应用下面的所有模块。

3、关闭后台模块,在后台入口文件(C:\AppServ\www\tp5\public)

// 定义应用目录

define('APP_PATH', __DIR__ . '/../application/');

// 绑定后台

define('BIND_MODULE','admin');

// 加载框架引导文件

require __DIR__ . '/../thinkphp/start.php';

// 关闭admin模块的路由

// 必须写到 加载框架引导文件 之后否则报错

\think\App::route(false);

4、路由模式

1、普通模式

a、定义

关闭路由,完全使用默认的 PATH_INFO 方式URL:

b、形式

http://www.tp.com/admin.php/index/index

c、如何设置

        在application下面的config.php的配置文件中

// 是否开启路由

'url_route_on'           => false,

// 是否强制使用路由

'url_route_must'         => false,

2、混合模式

a、定义:

开启路由,并使用路由定义+默认 PATH_INFO 方式的混合

b、如何设置

// 是否开启路由

'url_route_on'           => true,

// 是否强制使用路由

'url_route_must'         => false,

3、强制模式

1、定义:

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

2、如何设置

// 是否开启路由

'url_route_on'           => true,

// 是否强制使用路由

'url_route_must'         => true,

5、设置路由-动态单个注册

0、设置路由格式

Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)')

1、设置路由文件

C:\AppServ\www\tp5\application\route.php

2、如何设置

// 引入系统类

use think\Route;

// 定义路由规则

// 设置路由之后,就不能使用pathinfo访问了

// 注册路由 访问到Index模块index控制器index方法

Route::rule('/','index/index/index');

// 注册路由test 访问到Index模块index控制器test方法

Route::rule('test','index/index/test');

3、路由的形式

1、静态地址路由

// 注册路由test 访问到Index模块index控制器test方法

Route::rule('test','index/index/test');

2、路由带参数

// 注册带参数路由

// http://www.tp.com/couser/1

// http://www.tp.com/index/index/index/id/1

Route::rule('course/:id','index/index/course');

// 如果路由设置两个参数,必须带两个参数

Route::rule('time/:year/:month','index/index/shijian');

3、可选参数路由

// http://www.tp.com/time/2017

// http://www.tp.com/time/2017/8

Route::rule('time/:year/[:month]','index/index/shijian');

4、全动态路由(不建议大家使用)

Route::rule(':a/:b','index/index/dongtai');

5、完全匹配路由

// http://www.tp.com/test1 #可以成功访问

// http://www.tp.com/test1/1 #不能访问

Route::rule('test1$','Index/index/test1');

6、路由额外带参数

Route::rule('test2','Index/index/test2?id=10&name=zhangsan');

4、设置请求类型

1、TP中请求类型

get、post、put、delete

2、Route::rule() 默认支持所有请求类型

3、设置各种请求

// 支持get请求

Route::rule('type','Index/index/type','get');

// Route::get('type','Index/index/type');

// 支持post请求

// Route::rule('type','Index/index/type','post');

// Route::post('type','Index/index/type');

// 同时支持get和post

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

// 支持所有路由

// Route::rule('type','Index/index/type','*');

// Route::any('type','Index/index/type');

// 支持put请求

Route::rule('type','Index/index/type','put');

Route::put('type','Index/index/type');

// 支持delete请求

Route::rule('type','Index/index/type','delete');

Route::delete('type','Index/index/type');

4、如何模拟put和delete请求

<form action="type" method="post">**

<p>

<input type="hidden" name="_method" value="PUT">**

<input type="text" name="name" id="">

</p>

<p>

<input type="submit" value="提交">

</p>

</form>

6、设置路由-动态批量注册

1、基本格式

Route::rule([

'路由规则1'=>'路由地址和参数',

'路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']

],'','请求类型','匹配参数(数组)','变量规则');

2、使用

Route::rule([

"test"=>"index/index/test",

"course/:id"=>"index/index/course"

],'','get');

Route::get([

"test"=>"index/index/test",

"course/:id"=>"index/index/course"

]);

7、设置路由-配置文件批量注册

return [

"test"=>"index/index/test",

"course/:id"=>"index/index/course"

];

8、变量规则

// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

// 设置路由参数id必须是数字,必须1-3位

Route::rule("course/:id","index/index/course",'get',[],['id'=>'\d{1,3}']);

9、路由参数

// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

Route::rule("course/:id","index/index/course",'get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}']);

// 路由参数method 请求方式必须是get

// 路由参数ext 主要设置路由的后缀

10、资源路由

1、声明

Route::resource('blog','index/blog');

2、会自动注册七个路由规则

get blog                        index   # 后台展示

get     blog/create      create  # 添加页面

post    blog                       save    # 增加操作

get     blog/:id          read

get     blog/:id/edit    edit    # 修改页面

put     blog/:id          update  # 更新操作

delete  blog/:id           delete  # 删除操作

11、设置快捷路由

1、声明

Route::Controller('blog','index/blog');

2、控制器中

namespace app\index\controller;

class Blog{

public function  getindex(){

echo "我是bolg控制器index方法";

}

public function geta(){

echo "AAAAAAAA";

}

}

3、URL访问

http://www.tp.com/blog/a

http://www.tp.com/blog/index

12、生成url地址

  生成url地址

1、系统类

dump(Url::build('index/index/index'));

2、系统方法

dump(url('index/index/index'));

3、使用

// 普通url地址

dump(Url::build('index/index/index'));

dump(url('index/index/index'));

// 带参数url

dump(url('index/index/abc',['id'=>10,'name'=>"张三"]));

dump(url('index/index/abc','id=10&name=100'));

// string(45) "/index/abc/id/10/name/%E5%BC%A0%E4%B8%89.html"

// string(30) "/index/abc/id/10/name/100.html"

// 带锚点

dump(url('index/index/abc#name',['id'=>10,'name'=>"100"]));

// string(35) "/index/abc/id/10/name/100.html#name"

// 带域名

dump(url('index/index/abc#name@blog',['id'=>10,'name'=>"100"]));

// string(53) "http://blog.tp.com/index/abc/id/10/name/100.html#name"

// 加入口文件

Url::root('/index.php');

dump(url('index/index/abc#name@blog',['id'=>10,'name'=>"100"]));

// string(63) "http://blog.tp.com/index.php/index/abc/id/10/name/100.html#name"

 <?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- // 引入系统类
use think\Route; // 定义路由规则
// 路由的基本形式
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
// 静态路由
Route::rule('/','index/index/index');
// Route::rule('test','index/index/test');
// 带参数路由
Route::rule('course/:id','index/index/course');
// Route::rule('time/:year/:month','index/index/shijian');
// 可选参数的路由
// Route::rule('time/:year/[:month]','index/index/shijian');
// 全动态路由
// Route::rule(':a/:b','index/index/dongtai');
// 完全匹配路由
// Route::rule('test1$','Index/index/test1');
// 带额外参数
// Route::rule('test2','Index/index/test2?id=10&name=zhangsan'); // 设置路由的请求方式
// 默认支持所有请求方式
// 支持get请求
// Route::rule('type','Index/index/type','get');
// Route::get('type','Index/index/type'); // 支持post请求
// Route::rule('type','Index/index/type','post');
// Route::post('type','Index/index/type'); // 同时支持get和post
// Route::rule('type','Index/index/type','get|post'); // 支持所有路由
// Route::rule('type','Index/index/type','*');
// Route::any('type','Index/index/type'); // 支持put请求 // Route::rule('type','Index/index/type','put');
// Route::put('type','Index/index/type'); // 支持delete请求 // Route::rule('type','Index/index/type','delete');
// Route::delete('type','Index/index/type'); // 动态批量注册路由
// Route::rule([
// '路由规则1'=>'路由地址和参数',
// '路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']
// ...
// ],'','请求类型','匹配参数(数组)','变量规则'); // Route::rule([
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course" // ],'','get'); // Route::get([
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course" // ]); // 使用配置文件批量注册 // return [
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course"
// ]; // 变量规则
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)'); // Route::rule("course/:id","index/index/course",'get',[],['id'=>'\d{1,3}']); // 路由参数
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
// Route::rule("course/:id","index/index/course",'get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}']);
// 路由参数method 请求方式必须是get
// 路由参数ext 主要设置路由的后缀 // 声明资源路由 // Route::resource('blog','Index/blog'); // 声明快捷路由 // Route::controller('blog','Index/blog'); // return [
// '__pattern__' => [
// 'name' => '\w+',
// ],
// '[hello]' => [
// ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
// ':name' => ['index/hello', ['method' => 'post']],
// ], // ];

ThinkPHP5.0框架开发--第4章 TP5.0路由的更多相关文章

  1. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  2. ThinkPHP5.0框架开发--第3章 TP5.0 配置

    ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...

  3. ThinkPHP5.0框架开发--第1章 Tp5.0安装

    ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...

  4. ThinkPHP5.0框架开发--第2章 TP5.0架构

    ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...

  5. ThinkPHP5.0框架开发--第11章 TP5.0 杂项

    ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...

  6. ThinkPHP5.0框架开发--第10章 TP5.0验证器

    ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...

  7. ThinkPHP5.0框架开发--第9章 TP5.0视图和模板

    ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...

  8. ThinkPHP5.0框架开发--第8章 TP5.0 模型

    ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...

  9. ThinkPHP5.0框架开发--第7章 TP5.0数据库操作

    ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...

随机推荐

  1. 朴素贝叶斯python实现

    概率论是非常多机器学习算法基础,朴素贝叶斯分类器之所以称为朴素,是由于整个形式化过程中仅仅做最原始.简单的如果. (这个如果:问题中有非常多特征,我们简单如果一个个特征是独立的.该如果称做条件独立性, ...

  2. bzoj3713: [PA2014]Iloczyn(乱搞)

    3713: [PA2014]Iloczyn 题目:传送门 题解: 随手一发水题x2 直接离线啊,斐波那契到了第五十个就炒鸡大了 代码: #include<cstdio> #include& ...

  3. 杂项-分布式:Hadoop

    ylbtech-杂项-分布式:Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和 ...

  4. GRpc-Go使用笔记

      linux下配置GRpc-golang 1.git中下载protobuf包 2.解压(/usr/local/protobuf) unzip protobuf-cpp-3.0.0-alpha-3.z ...

  5. face++算法工程实习生面试

    2018-01-11 算法工程实习生  自动化工具链方面 面试的知识点非常仔细,十分检验基本功底 1.自我介绍 2.算法题,leetcode 第一题 两数之和 问python中数组和字典的查找时间复杂 ...

  6. 执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

    在执行python manage.py makemigrations时报错: TypeError: __init__() missing 1 required positional argument: ...

  7. node——含有异步函数的函数封装

    在写代码时我们会发现有大量的重复代码,为了使代码更加简洁,我们可以将重复的代码封装为一个可以在多个部分时候用的函数. 之前写的新闻代码中,经常出现的操作有对文件的读取,我们可以将它封装为一个函数rea ...

  8. node——request和response的常用对象

    request(http.IncomingMessage)和response(http.ServerResponse)对象介绍 request:服务器解析用户提交的http请求报文,将结果解析到req ...

  9. python之类的组合

    类的组合 学校与课程没有共同点,课程与老师没有共同点,但是学校与课程有关联,课程与老师有关联:学校.课程.老师是三个完全不同的类:课程是属于学校的,老师是教课程的,此时我们就用到类的组合来关联,学校- ...

  10. [置顶] 使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包

    作者:chenzhou123520 出处:http://chenzhou123520.iteye.com/blog/1706242 使用 maven 插件 maven-shade-plugin 对 j ...