总结下今天学习的知识点
系统配置文件:ThinkPHP/Conf/convention.php
分组 / 平台配置文件:Application/Home/Conf/config.php
应用配置文件:Application/Common/Conf/config.php
【一】ThinkPHP模型M
(1)配置数据库连接
数据库的连接配置可以在系统配置文件ThinkPHP/Conf/convention.php中找到
实际开发里,前台后台一般使用一个数据库,也就是说一个项目一个数据库,所以一个应用使用一个数据库,所以放到应用层级的配置文件ApplicationCommonConfconfig.php
(2)创建数据库和数据表
数据库名:db_oa
数据表名: sp_dept(department部门);
准备好sql语句.
知识点:not null不为空;auto_increment自增;default默认;
这里除了通过命令行cmd创建,还可以使用Navicat Premium。它是一个可多重连接的数据库管理工具,它可让你以单一程序同时连接到MySQL、SQL Server、SQLite、Oracle
(3)模型创建
(4)模型实例化(创建控制器,连接数据表)
模型的本质是类,类在使用时需要实例化操作。1. 普通实例化;2. 快速实例化方法U、M
(5)CURD操作
模型操作数据表的基本操作
【二】实用项
代码调试
(1)跟踪信息;
(2)两种模式,在ThinkPHP中为了方便开发,提供了两种模式:开发/模式模式,生产模式;
(3)sql调试;语法:$model -> getLastSql()--小驼峰命名法,表示获取当前模型里成功执行的最后一条sql语句。
别名:因为getLastSql书写不便,所以在3.2版本之后起了个别名_sql,用法与之前一致。语法:$model->_sql();
(4)性能调试,在ThinkPHP中系统提供了性能测试的快速方法G。
目前所学过的快速方法:U(URL组装),D(实例化自定义模型),M(实例化父类模型),G(性能测试)
【三】AR模式
(1)简介:AR模式即Active Record模式,是一个对象关系映射(ORM) 技术。每个AR 类代表一张数据表(或视图), 数据表(或视图)的字段在AR 类中体现为类的属性,一个AR实例
则表示表中的。
AR模式核心:三个映射 / 对应
AR类 == 表;(模型类关联了数据表)
AR类属性 == 表的字段;
AR类实例 == 表的记录;
(2)应用(AR模式中的CURD操作)
增加:$model ->add();//返回新增记录的主键id
更新:$model ->save();//返回值为影响行数
查询:AR模式没有查询操作
删除:$model -> delete();
【四】ThinkPHP视图V
(1)什么是视图?
MVC中的V(view),主要负责信息的输出展示
(2)视图的创建?
创建位置:分组目录Home下的View目录下指定的控制器名目录中,然后将模板绑定到控制器的方法中,一个公共控制器中可以绑定多个模板
注意:位置问题,控制器同名
①位置是view下与控制器同名的目录中;view下一级目录为控制器,二级目录为方法(对应的模板文件)
②如果有多个模板文件,则按照上面要求进行创建
(3)视图的展示?
在smarty中展示模板用的display方法,在ThinkPHP里同样是display方法
display在ThinkPHP中的3种语法格式:
①$this->display(); 展示当前控制器下与当前请求方法名一致的模板文件
②$this->display(模板文件名--不带后缀); 展示当前控制器下指定模板文件
③$this->display(view目录下目录名/模板文件名--不带后缀); 展示指定控制器下的指定模板文件
(4)变量分配:将变量从控制器的方法里传递到模板中展示的过程即为变量分配
(5)变量分隔符:ThinkPHP默认变量分隔符为{},可以在配置文件ThinkPHP/Conf/convertion.php里找到配置项
(6)模板常量替换机制
模板常量来源?
这里模板常量是通过模板内容替换机制来实现的,并非是常量的定义。所以模板常量并非是常量,而是字符串。
替换机制可以查看行为文件ThinkPHP/Library/Behavior/ContentReplace.Behaviour.class.php
拓展:查看后即可得出行为文件命名,文件名.Behaviour.class.php。
(5)获取模板内容
在ThinkPHP里有一个方法与display展示模板方法类似,叫做fetch()方法
$this->display();用来展示模板内容,而$this->fetch常用来获取模板内容,
该语法封装在系统的函数库ThinkPHP/Common/functions.php里
(7)视图注释
回顾下HTML的注释<!--注释内容-->,普通的注释在页面源码中会被输出
(8)变量分配
变量输出:简单变量,一维数组,二维数组,对象变量
变量的分配语法相同:都是assign('模板中的变量',PHP中的变量);
对象变量输出
对象在实例化之后,会保存到变量中,而这个变量也可以分配到模板里去
首先创建类,然后实例化类来创建对象
注意:
1. 对于多个人开发项目,函数名很容易重复。用了类之后,类之间的方法名被类分开,重名也没关系。
但是当项目更大时,类名也有可能重复。此时就要用到命名空间,来避免重名。所以创建类之前必须定义命名空间
2. 创建类文件时,必须加上文件名.class.php
Student.class.php,
TestController.class.php,该文件里不用引入,直接实例化类,输出
object(AdminControllerStudent)#6 (0) { }
类的实例化:
1. 之所以不用引入类就能实例化,主要因为命名空间
命名空间运行流程:当需要引入或使用元素时,默认先去当前空间下去找。而Student.class.php在当前空间下AdminController,所以会找到执行。若找不到则会报错
2. 如果不写命名空间、include、require则会默认从当前空间下去查找需要的元素,若找不到则报错
拓展:设置编码字符集:
index.php入口文件: //给入口文件添加header头声明字符集 header('Content-Type:text/html;charset=utf-8')
(9)系统变量
ThinkPHP里提供了以下几个系统级别的变量(可以理解为超全局变量在模板中的使用)
$Think.server;$Think.get;$Think.post;$Think.request;$Think.cookie;$Think.session;$Think.config;
(11)视图中使用函数
在实际开发中,有些变量不能直接使用。举个例子,数据表中存储时间一般都为时间戳格式,展示的时候需要处理格式化,操作相对繁琐。这个时候便涉及到了视图中使用函数
语法格式:{$变量|函数名1|函数名2=参数1,参数2...,###}
(12)默认值
使用场景:在论坛的个性签名处,如果用户什么都没写,一般默认会显示-----------→这个家伙很懒,什么都没留下
默认值:当某个变量不存在或为空时,便会显示默认字符或默认值
语法:{$变量名|default = 默认值},结合上面视图中函数的使用。这里可以理解为{$变量名|函数名=参数},而default为ThinkPHP封装的函数
(13)运算符
加减乘除取余,自增自减
{$a+$b},{$a-$b},{$a*$b},{$a/$b},{$a%$b},{$a++}或{++$a},{$a--}或{--$a}
(14)文件引入
提出公共部分,后期维护方便。语法:<include file='需要引入的模板文件'/>
(15)视图中数组循环遍历volist、foreach
在ThinkPHP里,系统提供了两个标签volist和foreach来实现数组在模板中的遍历操作
(16)if标签
PHP中if判断作用是流程控制,在ThinkPHP里同样也可以用于流程控制
语法:(注意<if></if>标签闭合)
(17)PHP标签
PHP标签指在模板中使用PHP语法格式
ThinkPHP支持两种形式标签①PHP内置的标签<?php 代码段 ?>;②ThinkPHP封装的PHP标签<php>代码段</php>
在配置项里,有一个配置项(TMPL_DENY_PHP即tmplate deny php拒绝php模板),可以禁用PHP标签。该配置项在系统配置文件ThinkPHP/Conf/convention.php里
// 布局设置 'TMPL_DENY_PHP' => false, // 默认模板引擎是否禁用PHP原生代码
开启后便会禁用原生PHP代码(不建议禁用),此时在模板文件里<?php ?>原生PHP标签失效。下面来验证下,发现报错
:( 模板禁用PHP代码
不建议禁用。若禁用了原生PHP标签,某些功能会异常。比如成功跳转和失败跳转,因为成功跳转和失败跳转使用了原生PHP标签,禁用的话会跳转失败