ThinkPHP
ThinkPHP
ThinkPHP本地搭建
安装composer
注意:开启php.ini的 opsenssl,将extension=openssl
前面的 ;
去掉
安装到 php7.3.4nts\php.exe
安装thinkphp
路径 D:\phpstudy_pro\WWW\think
安装ThinkPHP稳定版本
composer create-project topthink/think=版本号 名
访问
ThinkPHP框架
框架:框架就是一些代码类、方法(函数)、变量、常量的集合,这些代码是功能结构性的代码(并非业务代码)。业务代码其实就是具体的一些模块的增删改查逻辑代码
目录结构
1.project 应用部署目录
2.├─application 应用目录(可设置)
3.│ ├─common 公共模块目录(可更改)
4.│ ├─index 模块目录(可更改)
5.│ │ ├─config.php 模块配置文件
6.│ │ ├─common.php 模块函数文件
7.│ │ ├─controller 控制器目录
8.│ │ ├─model 模型目录
9.│ │ ├─view 视图目录
10.│ │ └─ ... 更多类库目录
11.│ ├─command.php 命令行工具配置文件
12.│ ├─common.php 应用公共(函数)文件
13.│ ├─config.php 应用(公共)配置文件
14.│ ├─database.php 数据库配置文件
15.│ ├─tags.php 应用行为扩展定义文件
16.│ └─route.php 路由配置文件
17.├─extend 扩展类库目录(可定义)
18.├─public WEB 部署目录(对外访问目录)
19.│ ├─static 静态资源存放目录(css,js,image)
20.│ ├─index.php 应用入口文件
21.│ ├─router.php 快速测试文件
22.│ └─.htaccess 用于 apache 的重写
23.├─runtime 应用的运行时目录(可写,可设置)
24.├─vendor 第三方类库目录(Composer)
25.├─thinkphp 框架系统目录
26.│ ├─lang 语言包目录
27.│ ├─library 框架核心类库目录
28.│ │ ├─think Think 类库包目录
29.│ │ └─traits 系统 Traits 目录
30.│ ├─tpl 系统模板目录
31.│ ├─.htaccess 用于 apache 的重写
32.│ ├─.travis.yml CI 定义文件
33.│ ├─base.php 基础定义文件
34.│ ├─composer.json composer 定义文件
35.│ ├─console.php 控制台入口文件
36.│ ├─convention.php 惯例配置文件
37.│ ├─helper.php 助手函数文件(可选)
38.│ ├─LICENSE.txt 授权说明文件
39.│ ├─phpunit.xml 单元测试配置文件
40.│ ├─README.md README 文件
41.│ └─start.php 框架引导文件
42.├─build.php 自动生成定义文件(参考)
43.├─composer.json composer 定义文件
44.├─LICENSE.txt 授权说明文件
45.├─README.md README 文件
46.├─think 命令行入口文件
配置文件
三个层级的配置文件:
-
框架主配置文件(惯例配置文件) thinkphp/convention.php
-
应用公共配置文件 application/config.php, application/database.php 对整个应用生效
-
模块配置文件 application/模块目录/config.php 对当前模块生效
其他说明:
-
配置文件格式 return array( 键值对 );
-
加载顺序: 框架主配置文件 》 应用公共配置文件 》 模块配置文件
-
配置文件生效顺序: 后加载的生效(后加载的配置项会覆盖之前配置项)
如果要手动进行配置,一般不要修改框架本身的主配置文件,
而是在应用或者模块配置文件中进行配置
函数文件
- 框架助手函数文件 thinkphp/helper.php
- 应用公共函数文件 application/common.php
- 模块函数文件 application/模块目录/common.php
- 一般不建议直接修改thinkphp/helper.php
ThinkPHP形式
url形式
http://servername/index.php/模块/控制器/方法操作/键值对
域名 首页
http://localhost/idnex.php/index/Index/index
模块命名空间以app为根命名空间(可通过环境变量更改)
模块
模块:在application目录下默认有一个index目录,index就是一个模块
控制器
在index目录瞎下有一个controller控制器目录的Index.php控制器(控制器在url中不区分大小写)kzq名字不可改
操作方法
操作方法:index和hello 两个方法
模块下的类库文件命名空就按统一为:app\模块名,如
Copyapp\index\controller\Index
index操作
hello操作
hello操作带键值对
url重写
(wamp环境开启了伪静态)
一个完全不重复的例子
- 创建新模块test
- 创建必须的controller
- 创建任意命名的控制器,如Abc
- 命名空间:namespace app\test\controller;
- 添加参数
任意参数
url模式
如果没有开启 伪静态
可以采取传参模式 如
http://127.0.0.1/index.php?s=test/abc/eat/who/隔壁小孩
模块设计
绑定模块
只有一个模块时,可以绑定这个模块 省略写法
只有一个模块一个控制器时
空模块
在config.php里进行修改
旨在多模块且没有绑定模块的情况下生效
单一模块
url地址:public/控制器/操作,命名空间:app/controller
环境变量
ctrl+左键 进入
添加参数
控制器定义
控制器:controller
显示为什么错误
访问hello_world
还可以 将url改为false
建议用下划线
更改根命名空间
根目录下建一个普通文件.env
写键值对来定义命名空间
渲染输出
1.ThinkPHP 直接采用方法内 return 返回的方式直接就输出了;
2.用 json 输出,直接采用 json 函数:
$data= array('a'=>1,'b'=>2,'c'=>3);
return jso($data);
3.使用 view 输出模版,开启错误提示,可知道如何创建模版;
return view();
4.默认输出方式为 htm1 格式输出,如果返回的是数组,则会报错:
5.可以更改配置文件里的默认输出类型,更改为ison;
return[ 'user'=>'Lee','age'=>100];
'default_return_type' =>'json',
数组
创建
控制器
$initialize()
继承了父类控制器 ,可以定义控制器初始化方法
继承:extends Controller
只要运行 这一个类的某些方法 这个初始化是必然会触发的
控制器操作
初始化
$beforeActionList
实现
继承controllerle 类之后可以设置一个$beforeActionList
属性来创建前置方法
index,two可以,one不可以
只有one,two能调用third,index不可以
跳转和重定向
$flag=true;
空方法和空控制器
空方法
空控制器
默认空控制器名称被设置为Error
request请求
数据库与模型
数据库连接
得到数据的对象集合
列出数据(table需要写上完整的表名,name不需要 因为在database.php中已经设置过‘tp_')
数据表
创建表
连接数据表
模型定义?
创建model,与数据库表名一致的User为名字
查询数据
table方法
查询一条数据(链式查询)
适用于查询当时返回的时什么sql
指定查询
空值 返回null
findOrFail 抛出异常
捕获异常
返回空数组
获取多列数据
抛出异常
设置前缀后 使用name 忽略前缀
db小写
指定字段
指定列的值
id索引
链式查询
查询方法
返回数据库连接对象
增删改查
增
单条新增
影响行数为1 则输出为1
在strict模式下 如果有拼写错误 如 details错写为deta 则details的新增数据不会被新增
replace into会覆盖新增
新增时返回当前id
批量生成数据
修改更新
更新
自增长
删除
查询
时间查询
链式查询
表前缀之扩展查询
当修改表名user为tp_user后
在.env文件中添加DB_PREFIX = tp_
同上 name可拼接前缀,table不可以
扩展查询
将id作为索引
两条一处理;
游标查询
ctrl点进去
条件判断类
like模糊查询
一样的效果
IN区间查询
NULL
not null
EXP查询,自定义SQL片段
原生查询
索引关联
where方法的数组查询
拼装高级查询
拼装查询
路由
配置路由
在index控制器里创建带参数的方法
通常方法
一个参数
可以传数字也可以传字符串
配置之后
:
之后是参数
方法名加参数(其中details可随意更换,但是参数‘:id’不可更换)
此时原来的方法不能执行
两个参数
可选参数
添加默认值
设置可选
传一个参数和两个参数的区别
正则规则 完全匹配
强制路由
开启强制路由 (因为都没配置路由 所有都访问不了)
路由闭包
什么是闭包
闭包是一种特殊的函数,可以不需要执行控制器的操作方法
(它可以在内部访问外部函数作用域中的变量,即使在外部函数执行结束后,这些变量仍然可以被访问)
不带参数
带参数
等于 think?version=8
变量规则
匹配第一个参数
设置其他参数,可选择单独设置也可以选择全局设置
-
可替换 /
组合变量
url()
\think\facade\Route::get('url','address/url')->name('det')//取别名
public function url()
{
return url('det',['id'=>10]);
}
重定向
//第一种写法
\think\facade\Route::get('details/:id','http://www.liyanhui.com/details/:id')->status(302);
//第二种写法
\think\facade\Route::redirect('details/:id','http://www.liyanhui.com/details/:id',302);
域名
miss
在Error.php里设置
路由分组
创建资源控制器
php think make:controller Blog
重置
方式,路径,方法名称