ThinkPHP框架二

时间:2022-06-11 10:20:44

ThinkPHP笔记二

1.1 TP框架的配置文件

在TP框架中,所有的配置文件都是自动加载的,加载的顺序:惯例配置《应用配置《调试配置《模块配置《动态配置

1、 惯例配置(ThinkPHP\Conf\convention.php),这个配置对所有的项目都适用

2、 应用配置(Application\Common\Conf\Config.php),这个配置对整个应用程序起作用

3、 调试配置(Application\Comment\Conf\debug.php),这个配置文件要自己添加。默认情况下是不存在的

4、 模块配置(Application\模块\Conf\Conf.php),对当前模块起作用

5、 动态配置  C(‘配置名’,’配置值’)

补充:C()函数在TP框架中用来获取配置文件的值。

1.2 空操作

TP在找不到请求的操作方法的时候,会定位到_empty()方法来执行,利用这个机制,可以实现用户请求的操作不存在的时候统一定位到某个地方处理。

形式:

public function _empty()

{

echo “当前操作不合法”;

}

1.3 空控制器

当系统找不到控制器的时候,会定位到空控制器((EmptyController)上。空控制器的使用主要用于对错误页面的提示。

1.4 跨控制器调用

1.4.1 直接实例化

例如:$info = new \Admin\Login\login

1.4.2 A()函数

A()函数用来实例化对象

1.4.3 R()函数

R()和A()使用方法基本一致,唯一不同的地方,R()在实例化 的时候把操作方法一起传递过去,这样就省略了调用操作方法 的步骤。

1.5  切换Smarty引擎

在配置文件中添加配置

return array(

‘TMPL_ENGINE_TYPE’=>Smarty

);

1.6  命名空间

在开发一个很大的项目的时候,会有很多代码,如何组织这些代码就成了很大的问题,PHP通过命名空间来解决这个问题,命名空间是一个名字,用来将代码进行逻辑分组,

命名空间是PHP5.3版本以后才支持的,命名空间可以包含类,函数和const常量

1.7 命名空间的声明和使用

1.7.1通过namespace关键字来声明命名空间。

注意的地方:第一个namespace前面不能出现任何代码,第一个namespace必须放在最前面

命名只能包含const常量,不能包含define()常量。也就说define()常量不受命名空间的约束。

1.7.2 多级命名空间

书写示例: namespace Chine\Shandong\Jinan

1.8 空间元素的三种访问方法

1、 非限定名称访问

2、 完全限定名称访问

3、 部分限定名称访问

1.9引入命名空间

完全限定名称访问不方便书写,维护,我们可以在当前的命名空间中引入指定的命名空间,然后通过部分限定名称访问来访问空间元素。

引入命名空间的关键字是use。

2.0 引入类

如果命名空间中有类,可以直接引入类,注意:常量和函数不能直接引入。

2.1 给类取别名

引入的类和当前命名空间中类名一样,在实例化的时候无法区分到底实例化那个类,解决方法:给引入的类取别名,用as关键字。

2.2 公共空间

如果PHP文件中没有namespace关键字声明,则该文件元素都存在于“公共命名空间”。

访问公共命名空间格式:”\元素”

2.3 命名空间的注意事项

1.针对类、函数、const常量有效,对define常量无效

2.第一个namespace前面不能有任何的代码包括header

3.引入带命名空间的文件,对当前文件的命名空间不产生影响

4.命名空间都是虚拟的抽象空间,不是真是存在的目录,但是在 TP框架中,命名空间和路径是一致的,TP将命名空间转换成 路径来引入类。

2.4 连接数据库

TP框架中内置了数据库访问层,把不同的数据库操作都封装起来,我们无需针对不同的数据库写不同的代码,我们只需对公共的DB类进行操作,DB类会自动调用对应数据库的驱动来处理。

打开convention.php文件,将数据库配置文件拷贝到cofig.php中,更改配置

2.5创建Model模型类

2.5.1模型类的创建规则

1、 模型名和表名一致,表名+Model

2、 文件名和类名一致,以.class.php结束。

3、 每一个模型都要继承基础模型类。

2.5.2 重写表名

如果数据库中表名比较特殊,需要在模型层中重写表名

情形一:重写表名,包含表前缀

Protected $trueTableName

情形二:重写表名,不包含表前缀

Protected $TableName

2.5.3 三种实例化模型的方法

1.直接实例化

2.M()方法,相当于是new Model();M()通过传递表名可以操作相 应的表,但是对象的数据类型是Model型;

3.D()方法,如果Model不再模块文件下,实例化的是基础模型 类(Model),和M()一样

如果Model在模块下,实例化的是子类,和直接实例化子类一 样。

2.5.4 对表进行操作

1、 增 $model->add(关联数组)

2、 改 $model->save(关联数组)

3、 删 $model->del($id)

4、 查 $model->select() 返回的二维数组

5、 查 $model->find() 返回一条记录

2.5.5 条件查询

1.按主键查询 $list=model->select(查询条件,[查询条件2...]);

2.Where条件 $list = where()->$model->select();

3.Limit限制

例1:$list=$model->limit(2)->select();    //取前两条记录,从 0条开 始

例2:$list=$model->limit(2,5)->select();      //从第2条开始, 取5 条记录

4.排序

$list =$model->order(‘数据 asc’)->select(); 按升序查询, 默认,asc可以省略

$list=$model->order(‘数据 desc’)->select(); 按照数据的降序查 询

5.指定查询字段

$list=$model->field(‘数据字段名字,[可选字段]’)-select();

6.分组查询

$list=$model->group(‘分组条件’)->select();

7.having

having和where的区别:

Where条件查询的字段必须数据表中存在,having条件字段必 须在结果集中存在。

8.直接执行SQL语句

通过基础模型类的对象直接执行SQL语句。

$list = M()->query(‘select * from 表名’);

9.链式操作之间没有先后顺序只要将select放在最后就行。

2.5.6动态查询:语法:getBy+字段名

备注:动态查询是已经在TP框架中封装好的方法,一次只能查询一次记录

2.5.7聚合函数:

$model->count()  //查询总记录数

$model->max()   //查询记录最大值

$model->min ()   //查询记录最小值

$model->sum()   //查询记录的总和

$model->avg()   //查询记录的平均值