关于TP5.1框架一些基础知识小结

文章目录

  • 默认入口文件
  • TP5支持的URL模式
  • URL大小写问题
  • 响应输出
  • 使用框架类方法读取配置文件注意事项(TP5.1)
  • TP5.1配置文件优先级
  • Thinkphp概念个人理解

默认入口文件

关于TP5.1框架一些基础知识小结_第1张图片
首先呐,可能是受Laravel的启发,新的TP5框架改掉了之前入口文件放在框架根目录(TP3)的习惯,将入口文件放在了public目录下。此目录下的所以资源都能被URL访问所获取,所以对于一些敏感文件请不要放在这里

TP5支持的URL模式

关于TP5.1框架一些基础知识小结_第2张图片
TP5所支持的URL模式相对于TP3是不同的,对于传统的m(模型)c(控制器)a(方法/操作)是不给予支持了

URL大小写问题

关于TP5.1框架一些基础知识小结_第3张图片
默认情况下,URL是不区分大小写的,也就是说,除了开头用的域名和参数外,后面的控制器,方法名都是不区分大小写的

响应输出

关于TP5.1框架一些基础知识小结_第4张图片
对于TP5控制器,本应可以返回数组(Array)格式,但是需要设置config目录下的app.php(我使用的是TP5.1)中的default_return_type参数。参数默认输出类型为html,将其设置为josn/xml即可
默认输出类型
如果不想更改配置可直接使用exit函数
关于TP5.1框架一些基础知识小结_第5张图片

使用框架类方法读取配置文件注意事项(TP5.1)

关于TP5.1框架一些基础知识小结_第6张图片
在TP5.1之前的框架中,使用这样的方式可以读取到所以配置项以及值。但是在TP5.1中是无法使用的。正确的使用方法如下:
关于TP5.1框架一些基础知识小结_第7张图片

TP5.1的配置文件集中放置在与application同级目录下的config目录中
关于TP5.1框架一些基础知识小结_第8张图片
这些配置可以在任何位置被使用
如果想要在application\index使用自己配置的数据库,可在config目录下创建index\database.php,这样会覆盖原来config目录下的database.php
关于TP5.1框架一些基础知识小结_第9张图片
关于TP5.1框架一些基础知识小结_第10张图片
当然这样的配置只能在application\index目录下生效
多数据库的配置:
关于TP5.1框架一些基础知识小结_第11张图片
在database.php文件下添加数据库配置
读取数据库配置文件
读取app这个配置文件:
关于TP5.1框架一些基础知识小结_第12张图片
记得要加点,不然会返回NULL
使用助手函数:
关于TP5.1框架一些基础知识小结_第13张图片
如果只获取一级配置项,推荐使用pull方法:
关于TP5.1框架一些基础知识小结_第14张图片
在配置文件中,app是默认的一级配置文件,是什么意思呢?
关于TP5.1框架一些基础知识小结_第15张图片
上面两种获取配置文件是一致的
使用助手函数:
关于TP5.1框架一些基础知识小结_第16张图片
查询配置文件是否存在:
关于TP5.1框架一些基础知识小结_第17张图片
使用助手函数:
关于TP5.1框架一些基础知识小结_第18张图片
动态设置配置文件:
关于TP5.1框架一些基础知识小结_第19张图片
助手函数(助手函数只有一个,可以通过输入参数的不同实现get、has、set):
关于TP5.1框架一些基础知识小结_第20张图片

TP5.1配置文件优先级

application/module_name/config/app.php优先级第一

application/config/app.php优先级第二

application/config/module_name/app.php优先级第三

关于Config下的get方法,我试图使用,但是百度不到

Thinkphp概念个人理解

  1. 参数类型约束

    	对一个参数进行类型约束成一个对象后,他会自动的实例化(Request $request)
    
  2. 单例模式、工厂模式、对象树

    	单例模式可以理解为手机制作图纸
    	工厂模式则是可以大批量生产手机的工厂
    	对象注册树则是每个手机都要获得入网许可,每个手机都有自己的IMEI号
    
  3. Trait类

    	Trait类是为了突破php对继承的数目限制,实现代码复用的一种手段
    
  4. 容器、依赖注入

    原理:

    • 任何一个URL访问最终都会访问到控制器中某一个具体的方法

    • 一个控制器对应着一个类,如何进行统一管理?

    • 容器用于类的管理,还可以将类的实例(对象)作为参数,传递给类方法,自动触发依赖注入

    • 依赖注入:将对象类型的数据,以参数的方式传送到方法的参数列表

    • URL访问:通过GET方式将参数传送到指定控制器方法中,例如 字符串、数值等

    • 如果要传一个对象到方法中呢?

    • 依赖注入:解决向类中方法传入对象

      容器其实就是对象注册树
      依赖注入这是为了实现将对象作为参数传入控制器方法
      
  5. 绑定类到容器

    	绑定类到容器,其实就是实例化一个类的过程
    
  6. 闭包

    	如果类是家用筷子,闭包就是一次性的
    
  7. facade(门面)

  •   facade字面意思是门面,作用是静态代理,让动态方法能够静态调用
    
  •   之前每次require其他类的时候,都需要new一个对象出来,才能调用其方法(创建对象后使用->来调用方法),现在能直接调用(使用::调用)
    
  •    要使用门面技术就需要继承TP框架的\think\Facede类
    
  •   比较原始的手段是创建一个继承Facade的类,通过getFacadeClass这个静态方法来手动绑定一个需要静态代理的类的命名空间
    
  •   TP框架中提供了动态绑定的函数,即\think\Facade::bind,需要两个参数,第一个为用来代理的类的命名空间,第二个为需要代理的类的命名空间
    
  1. 绝对路径和相对路径

    	\app\index 和 app\index 的含义是不一样的,前者是绝对路径,而后者是相对路径
    
  2. ThinkPHP5.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( d a t a ) 是 普 通 写 入 D b : : i n s e r t ( data)是普通写入 Db::insert( data)Db::insert(data,ture)是使用replace方式写入,只支持mysql数据库
Db::insertGetId( d a t a ) 写 入 数 据 后 , 返 回 其 i d 多 条 插 入 D b : : i n s e r t A l l ( data)写入数据后,返回其id 多条插入 Db::insertAll( data)idDb::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=""}来引用这两种文件

你可能感兴趣的:(ThinkPHP)