默认入口文件
![](https://img.kancloud.cn/af/0d/af0de67c1c503cfb975610c4cb2b6f33_1199x567.png)
首先呐,可能是受Laravel的启发,新的TP5框架改掉了之前入口文件放在框架根目录(TP3)的习惯,将入口文件放在了public目录下。此目录下的所以资源都能被URL访问所获取,所以对于一些敏感文件请不要放在这里
TP5支持的URL模式
![](https://img.kancloud.cn/cb/6c/cb6cfda2d42536d14838dda08d1f0548_1189x596.png)
TP5所支持的URL模式相对于TP3是不同的,对于传统的m(模型)c(控制器)a(方法/操作)是不给予支持了
URL大小写问题
![](https://img.kancloud.cn/a1/00/a100eaa1470301078e52ebda22f2f06f_1237x618.png)
默认情况下,URL是不区分大小写的,也就是说,除了开头用的域名和参数外,后面的控制器,方法名都是不区分大小写的
响应输出
![](https://img.kancloud.cn/a8/88/a8882346ee0a79df12da631d8e6117df_1133x451.png)
对于TP5控制器,本应可以返回数组(Array)格式,但是需要设置config目录下的app.php(我使用的是TP5.1)中的default_return_type参数。参数默认输出类型为html,将其设置为josn/xml即可
![](https://img.kancloud.cn/63/76/6376e3a8e4c8a2789ed2d328516bec59_340x54.png)
如果不想更改配置可直接使用exit函数
![](https://img.kancloud.cn/31/9e/319ecafb8aceab92208e6cb40b23e246_556x102.png)
使用框架类方法读取配置文件注意事项(TP5.1)
![](https://img.kancloud.cn/3b/4a/3b4aede39ae6b0f3f08f6de808601a9d_399x128.png)
在TP5.1之前的框架中,使用这样的方式可以读取到所以配置项以及值。但是在TP5.1中是无法使用的。正确的使用方法如下:
![](https://img.kancloud.cn/fe/1a/fe1afb77e3cfea917793fa93d9fc5845_459x117.png)
TP5.1的配置文件集中放置在与application同级目录下的config目录中
![](https://img.kancloud.cn/8b/ac/8bac2b9950c3f74d45752afa5f0b4782_275x548.png)
这些配置可以在任何位置被使用
如果想要在application\index使用自己配置的数据库,可在config目录下创建index\database.php,这样会覆盖原来config目录下的database.php
![](https://img.kancloud.cn/75/55/75553e4afc9f63f32ac4788aa51ea65b_737x425.png)
![](https://img.kancloud.cn/67/ce/67cecb3367d4551c15f3acc7364f10be_553x195.png)
当然这样的配置只能在application\index目录下生效
多数据库的配置:
![](https://img.kancloud.cn/74/fd/74fd00dc765244f8dcdc9c63f30fcce3_429x314.png)
在database.php文件下添加数据库配置
![](https://img.kancloud.cn/86/ec/86eca67bf988a05507fa7b1f9076579b_1023x54.png)
读取app这个配置文件:
![](https://img.kancloud.cn/53/90/539087dc0709779fcdf2a0ea95d194f1_412x120.png)
记得要加点,不然会返回NULL
使用助手函数:
![](https://img.kancloud.cn/ba/aa/baaa80be12c27208b3418130ba642244_336x107.png)
如果只获取一级配置项,推荐使用pull方法:
![](https://img.kancloud.cn/d5/ef/d5eff4929fec836af59a74281ae1a3fa_372x103.png)
在配置文件中,app是默认的一级配置文件,是什么意思呢?
![](https://img.kancloud.cn/88/f4/88f40f0b45e1e2c701239c8b7cc2d35c_417x126.png)
上面两种获取配置文件是一致的
使用助手函数:
![](https://img.kancloud.cn/ed/00/ed00401513c4d9f5346f43bad31f99a7_389x133.png)
查询配置文件是否存在:
![](https://img.kancloud.cn/ea/fb/eafb5f5b00ecea1600c5b026dd6a2c6a_414x103.png)
使用助手函数:
![](https://img.kancloud.cn/c9/06/c90646d8a3775789cb756099fd14608f_331x107.png)
动态设置配置文件:
![](https://img.kancloud.cn/a2/1b/a21bb1241d1b7126079b697af5004754_388x151.png)
助手函数(助手函数只有一个,可以通过输入参数的不同实现get、has、set):
![](https://img.kancloud.cn/eb/bf/ebbf094b208069dd27708ed380060267_427x154.png)
TP5.1配置文件优先级
application/module_name/config/app.php优先级第一
application/config/app.php优先级第二
application/config/module_name/app.php优先级第三
关于Config下的get方法,我试图使用,但是百度不到
Thinkphp概念个人理解
参数类型约束
1 对一个参数进行类型约束成一个对象后,他会自动的实例化(Request $request)
单例模式、工厂模式、对象树
1 单例模式可以理解为手机制作图纸
2 工厂模式则是可以大批量生产手机的工厂
3 对象注册树则是每个手机都要获得入网许可,每个手机都有自己的IMEI号
Trait类
1 Trait类是为了突破php对继承的数目限制,实现代码复用的一种手段
容器、依赖注入
原理:
任何一个URL访问最终都会访问到控制器中某一个具体的方法
一个控制器对应着一个类,如何进行统一管理?
容器用于类的管理,还可以将类的实例(对象)作为参数,传递给类方法,自动触发依赖注入
依赖注入:将对象类型的数据,以参数的方式传送到方法的参数列表
URL访问:通过GET方式将参数传送到指定控制器方法中,例如 字符串、数值等
如果要传一个对象到方法中呢?
依赖注入:解决向类中方法传入对象
1 容器其实就是对象注册树
2 依赖注入这是为了实现将对象作为参数传入控制器方法
绑定类到容器
1 绑定类到容器,其实就是实例化一个类的过程
闭包
1 如果类是家用筷子,闭包就是一次性的
facade(门面)
1 facade字面意思是门面,作用是静态代理,让动态方法能够静态调用
2 之前每次require其他类的时候,都需要new一个对象出来,才能调用其方法(创建对象后使用->来调用方法),现在能直接调用(使用::调用)
3 要使用门面技术就需要继承TP框架的\think\Facede类
4 比较原始的手段是创建一个继承Facade的类,通过getFacadeClass这个静态方法来手动绑定一个需要静态代理的类的命名空间
5 TP框架中提供了动态绑定的函数,即\think\Facade::bind,需要两个参数,第一个为用来代理的类的命名空间,第二个为需要代理的类的命名空间
绝对路径和相对路径
1 \app\index 和 app\index 的含义是不一样的,前者是绝对路径,而后者是相对路径
ThinkPHP5.1控制器较之前版本的区别
1 在TP5.1中控制器不需要继承
继承父类可以使用父类中已有的属性和方法
Controller.php是不可以使用静态代理的
Request中请求对象的方法:
1.new Request()
2.使用静态代理 \think\Facede\Request
3.使用依赖注入:\think\Request $request
4.使用父类的属性 $request $this->request
数据库连接的方法有三种:
1.全局配置,在config目录的database.php文件中进行配置
2.动态配置,使用\think\Db::connect([])进行配置,只能在本次使用
3.DSN配置,格式如:数据库类型://用户名:密码@数据库地址:端口/数据库名称#字符集类型(例如:utf8)
再传入\think\Db::connect()中
数据库的CURD:
1.插入
单条插入
需要先有一个数组存放数据
Db::insert(data)是普通写入Db::insert( data)是普通写入Db::insert(data)是普通写入Db::insert(data,ture)是使用replace方式写入,只支持mysql数据库
Db::insertGetId(data)写入数据后,返回其id多条插入Db::insertAll( data)写入数据后,返回其id多条插入Db::insertAll(data)写入数据后,返回其id多条插入Db::insertAll(data)
2.查询
单条查询
需要连贯操作进行
* table():需要输入完整的数据库名称
* where(): 设置查询条件 表达式 数组
* 单一条件用表达式
* 多个条件用数组
* find():返回符合条件的第一条数据
where中的查询条件可以写在find()中
field()用于设置接收的字段和设置别名(别名设置在现版本中好像只支持英文别名)
多条查询
select()
遍历时使用foreach可以消掉数据前的下标
3.更新
update()
4.删除
delete()
原生数据库操作:
查询:ELECT id,OwnerId FROM merchant_release_parking_space WHERE id IN (23,24,25)
插入:INSERT merchant_release_parking_space SET OwnerId=11,SpaceAddress=‘华东交通大学停车场’
更新:UPDATE merchant_release_parking_space SET OwnerId=11 WHERE id=23
删除:DELETE FROM merchant_release_parking_space WHERE OwnerId=11 AND SpaceAddress=‘华东交通大学停车场’
模型是用于与一张数据表绑定的
需要继承think\Model类
在控制器中可以使用模型来代替数据库连接
例如:Student::等价于Db::table(‘student’),这样返回的数据为对象类型
模板支持前缀,只需要写入剩余部分即可
模板返回的数据为对象类型,普通查询返回的数据非对象,不能进行对象操作
不需要模板直接输出变量有三种方法:
1.调用父类display方法(需要继承 \think\Controller)
2.调用父类视图类实例变量view的display(需要继承 \think\Controller)
3.使用静态调用(\think\Facade\View)
4.依赖注入(\think\View $view)
模板输出:
使用assign将变量传入
* 传入变量可以为:
* 一个单独变量
* 多个变量
* 一个数组
* 一个对象
调用assign的方式需要和调用fetch的方式相同,前端才能接收到传过来的变量
模板布局:
为了简化网站中某些固定布局,减少重复劳动
在当前模块中创建view文件夹,创建类似header、footer的html文件,将可能需要重复利用的html拆分到每个html中
需要使用时,通过{include file=’’ /}进行调用
TP框架默认调用为view下
开启全局模板布局可以让用户只关注网站主体部分
需要设置:
// 开启全局模板布局
‘layout_on’ => false,
// 全局模板布局名称
‘layout_name’ => ‘layout’
// 模板布局主题部分
‘layout_item’ => ‘{text}’
当访问模板时,优先访问view下的layout模板文件,其中的{CONTENT}为用户可编辑替换的主体部分
模板继承:
相对于模板布局灵活性更好些
通常情况下在view目录下创建public目录,放置一些公共文件,其中base.html为公共继承模板
主体部分改为模块
{block name=’’}{/block}
当需要继承模板时
{extend name=’’ /}
使用标签{block name=’’}{/block}对父类模块进行重写
如果需要显示原父类标签中内容 {block}
验证器验证分为两种:
1.验证器验证
2.独立验证
二者区别:独立验证不依赖用户自定义的验证器类
验证器:新建验证类,继承框架validate类,重写$rule变量
调用方式有三种:
1.调用自定义验证器类进行验证
2.调用系统定义验证器类进行验证(需要先绑定门面和自定义规则类)
3.调用Controller类中validate函数,第一个参数为验证信息,第二个参数为验证规则类(即自定义验证器)(控制器验证)
在用户自定义验证器类的时候,unique参数用于验证输入信息在指定表中是否唯一
confirm参数用于密码验证
TP框架错误信息的输出不但可以在HTML中显示,也可以切换成控制台显示,在config目录下的trace.php中进行设置
在标准html页面中,使用link标签引用css样式,使用script引用js文件,在TP5.1框架中可以使用{load href=""}来引用这两种文件