ThinkPHP模板的知识(比较全的知识)解析.pdf

上传人:tbuqq 文档编号:4701606 上传时间:2019-11-27 格式:PDF 页数:33 大小:5.15MB
返回 下载 相关 举报
ThinkPHP模板的知识(比较全的知识)解析.pdf_第1页
第1页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ThinkPHP模板的知识(比较全的知识)解析.pdf》由会员分享,可在线阅读,更多相关《ThinkPHP模板的知识(比较全的知识)解析.pdf(33页珍藏版)》请在三一文库上搜索。

1、ThinkPHP模板的知识(比较全的知识) php 框架 一、真实项目开发步骤: 1.多人同时开发项目,协作开发项目、分工合理、效率有提高(代码风格不一样、分工不好) 2.测试阶段 3.上线运行 4.对项目进行维护、修改、升级(单个人维护项目,十分困难,代码风格不一样) 5.项目稳定的运行阶段 6.项目停止运行(旧项目的人员已经全部离职,新人开发新项目) 二、问题: 1. 多人开发项目,分工不合理,(html php mysql ) 2. 代码风格不一样,后期维护十分困难 3. 项目生命周期十分短,项目生命没有延续性,造成资源浪费、人员浪费 4. 项目不能很好适应客户需求,牵一发而动全身。 三

2、、其他相关框架 1. zendframework zend php语言公司发布的官方框架,重量级(功能多 ) 2. yii 美国华人开发的框架, xue qiang, qiang, 重量级框架,纯 OOP 框架 3. CI CodeIgniter轻量级框架,开发速度快,部署灵活 1.cakephp外国框架,重量级,速度慢 2.symfony外国重量级框架 3.ThinkPHP轻量级框架,国人框架,入门容易 四、什么框架: 一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR 数据库、单例等等。 框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。 五、为

3、什么使用框架 (1)框架可以帮组我们快速、稳定、高效搭建程序系统 (2)该系统由于框架的使用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。 (3)使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。 【使用框架】 thinkphp 3.2版本 【框架项目部署】 部署一个 Shop 项目,使用 tp 框架 步骤: 创建入口文件: 1. 在 ThinkPHP 目录下创建一个入口文件index.php 2. 访问入口文件的同时系统会自动把对应的应用目录文件Shop 创建出来 3. 打开 Home 文件夹 【MVC 模式】 M:Model 数据模型层,负责数

4、据操作 V:View 视图层,负责显示视图 C:Controller 控制器,实现业务逻辑 【控制器访问及路由解析】 通过 url 地址 get 参数找到指定的控制器,并进行对应方法调用请求 http:/网址/index.php?m=模块名称 include “ config.php”;后引入的文件要把先引入的文件配置变量给覆盖掉 我们系统有兼容 4 中 url 地址模式的使用 系统有的时候会自动创建url 地址,它会根据当前模式进行url 地址创建使用 快捷函数 U(); 创建 url 地址 通过 url 地址模式我们学习到了以下内容: 1.我们学习到了配置变量(核心配置变量conversi

5、on.php、当前应用配置变量config.php) 2.快捷函数 U( “ 模块/ 控制器/ 方法”) 根据参数和 url 模式创建对应的 url 地址 3.把框架的模式调整为开发调试模式 【开发、生产模式】 开发调试模式:系统需要加载大概24 个文件index.php define( “APP_DEBUG”,true); 生产模式:系统只需要加载很少的大概7 个文件在入口文件 index.php中定义:define(“ APP_DEBUG ” ,false); 节省了许多文件的开发、关闭的系统开销,节省资源 要在页面显示 trace 信息,需要在自己的配置文件中: 【控制器和对应方法创建】

6、 控制器是 MVC 模式中的核心, tp 默认有一个 Index控制器: Index控制器里面有一个操作方法:Index 我们在访问 http:/localhost:8080/Thinkphp/index.php入口文件的时候,会默认访问 Index控制器下面的 Index 方法 如果要自己创建一个控制器Login : 1. 在ShopHomeController文件夹下新建一个控制器文件LoginController.class.php 注意:文件命名规则,按照驼峰法命名 2. 打开该文件,在里面造控制器Login 类 3. 如果要自定义操作方法,在控制器Login 类里面加一个函数Logi

7、n() : 这样我们就完成了控制器和操作方法的建立,如果要访问我们刚才的Login 控制器下的 Login 方法: 4. 控制器中如果要调用视图层中的模板: 这样再次访问,会发现报错: 原因:模板文件没有创建,这时候我们就要去创建模板文件 【视图模板文件创建】 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login 控制器中的 Login 方法,首先我们要创建一个Login控制器对应的模板文件夹,该文件夹就 对应着 Login 控制器: 然后在 Login 文件夹下再创建一个login.html的模板文件来对应Login 控制器下的 Login 方法: 在 login.htm

8、l里面写入要显示的代码: 然后再次请求: 【url 地址大小写设置】 默认是不敏感的: 在 config.php里边对 url 大小写敏感进行设置 【空操作和空控制器处理】 空操作:就没有指定的操作方法 空控制器:没有指定控制器 http:/网址/index.php/Home/User/login http:/网址/index.php/Home/User/hello空操作 http:/网址/index.php/Home/beijing/login 空控制器 空操作: 一般网站处于安全考虑不给用户提示任何错误信息 “ 空操作 ” 本质意思:一个对象 (控制器 )调用本身不存在的方法 在 OOP

9、里边,对象调用本身不存在方法, 处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法: function _call(); 在 tp 里面控制器的父类: 父类中有个方法: 所以空操作有两种解决方案: 在对应的控制器里边制作一个方法,名称为”_empty”, 这个控制器的空操作都会自动执行该方法。(推荐使用) 给空操作的名称制作一个同名的模板出来,系统会自动调用 空控制器: 空控制器:在实例化控制器对象的时候,没有找到指定的类 什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php 熟记文件: index.php 入口文件 ThinkPHP/

10、ThinkPHP.php 框架核心文件 ThinkPHP/Library/Think/Think.class.php 框架核心文件 ThinkPHP/Library/Think/App.class.php 框架应用文件 在 App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容: 空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php 在该控制器内部其实只需要制作一个_empty()方法即可。 这样再次请求: 【项目分组】 系统有前台用户操作界面 系统还有后台供公司内部人员使用维护平台 两者在使用的过程中就是对“ 控制器 ” 、

11、“ 视图模板 ” 、“model 模型” 的操作。 为了系统开发方便,及代码部署更加合理,我们的控制器、view 视图等前后台文件不要混在起,要在物理结构上给分 开 http:/网址/index.php/Home/控制器 /操作方法 访问 Home 控制器及制定操作 http:/网址/index.php/Admin/控制器 /操作方法 访问 Admin分组的控制器和操作方法 【系统常量信息】 获取系统常量信息: 如果加参数 true ,会分组显示: 【跨控制器调用】 一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。 跨控制器调用可以节省我们代码的工作量 在 Main

12、控制器中有一个 Info 操作方法 想要在其它控制器,比如Login 中调用,我们可以实例化控制器对象,调用里面的方法即可: 造对象有快捷函数供我们使用: A( “ 模块/ 控制器标志 ” ) 实例化控制器对象 R( 模块/ 控制器标志 /操作方法 ) 实例化对象同时调用指定方法 【连接数据库配置及Model 数据模型层】 convertion.php config.php 1. 在 config.php做数据库连接配置 2. 制作 model 模型 a) model本身就是一个类文件 b) 数据库中的每个数据表都对应一个model模型文件 c) 最简单的数据 model 模型类 3. 字段缓

13、存设置 tp 框架执行过程中会使用到数据表中的字段信息,通过 sql 语句可以查询 ” show colums from table”,处于性能考虑, 可以把字段缓存,避免每次重复执行sql 语句。 4. 可以根据情况对当前的model模型进行个性化设置 实例化 Model的三种方式: 1.$goods = new 命名空间 GoodsModel(); 2.$goods = D( 模型标志 ); a) $goods = D(“ Goods” ); b) 该$goods是父类 Model 的对象,但是操作的数据表还是sw_goods c) $obj = D(); 实例化 Model 对象,没有具

14、体操作数据表,与M() 方法效果一致 1.$obj = M(); a) 实例化父类 Model b) 可以直接调用父类Model 里边的属性,获得数据库相关操作 c) 自定义 model就是一个空壳,没有必要实例化自定义model d) $obj = M(数据表标志 ); 实例化 Model 对象,实际操作具体的数据表 $obj = D(标志); $obj = D(); $obj = M(标志); $obj = M(); D() 和 M() 方法的区别: 前者是 tp3.1.3里边对 new 操作的简化方法 ; 后者在使用就是实例化Model 父类 两者都在函数库文件定义ThinkPHP/mo

15、n/functions.php 注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作 D() 和 M() 方法都可以实例化操作一个没有具体model模型类文件的数据表。 【数据查询】 select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组信息,当前数据表的全部数据信息 $obj = D(); 创建对象 $obj - select(); 查询数据 select 字段,字段from 表名where 条件group 字段 having 条件order 排序limit 限制条数 ; SELECT%DISTINCT%FIELD%FROM %TAB

16、LE%JOIN%WHERE%GROUP%HAVING%ORDER %LIMIT% %UNION%COMMENT% $obj -field(字段,字段 ); 查询指定字段 $obj -table(数据表 ); 设置具体操作数据表 $obj -where(参数); 参数就是正常 sql 语句 where后边的条件信息 例如: ( “goods_price 100 andgoods_name like 三% ”) $obj -group(字段); 根据字段进行分组查询 $obj -having(参数条件 ); having 条件设置 $obj - order( price desc/asc) 排序查

17、询 $obj -limit(偏移量, 条数) 限制查询的条数 sql 语句里边具体的条件设置在tp 框架 model 模型里边体现为具体的方法操作 以上方法理论上是父类Model 的对应方法 父类 model 具体存在方法: field() where() limit() 还有一些方法在 _call()自动调用函数里边:table() group() order() having() 在_call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行。 以上多个方法是同时使用多个进行条件显示(并且没有顺序要求) $obj - limit(5)-field

18、( id,name )-order( price asc ) - table( sw_goods )-select(); 以上许多方法执行没有顺序要求, 许多方法执行后都是把具体的参数赋予到model 属性options里边,最后根据 options 拼装 sql 语句。 $info = $goods - where()-field(字段)-select(); select()方法 1返回一个二维数组信息 2返回全部数据表信息 3给该方法传递参数 a) select(30) 查询主键值等于30 的记录信息 b) select(“ 10,12,14”)查询主键值在 10 、12 、14 范围的记

19、录信息 4.find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组 为了使用方便我们会希望返回一个一维数组,这时候可使用find() 方法 5.having()方法设置查询条件, where()设置查询条件 6. 相关聚合函数count() sum() avg() max() min() 以上聚合函数是最后被调用的方法 以上方法可以结合具体条件方法使用 例如:$goods - where( goods_price 1000)-count(); 大于 1000 元的商品的总数目 【数据添加】 add() 该方法返回被添加的新记录的主键id 值 两种方式实现数据添加 1

20、. 数组方式数据添加 $goods = D(“ Goods” ); $arr = array( goods_name = iphone5s , goods_weight = 109 ); / 注意:goods_name和 goods_weight是数据表中字段名称 $goods - add($arr); 2.AR 方式实现数据添加 a) ActiveRecord 活跃记录 b) AR 规定了程序与数据库之间的关系 c) 什么是 AR: d) 一个数据表对应一个类model e) 一条数据记录对应类的一个对象 f) 每个字段对应该对象的具体属性 g) tp 框架的 AR 是假的 $goods =

21、 D(“ Goods” ); $goods - goods_name = “ htc_one ”; $goods - goods_price = 3000; $goods - add(); 以上两种方式:数组、 AR,最后 add 都要把新记录的主键id 值返回 【收集表单数据入库操作】 1.制作一个表单 2.通过$_POST 收集信息 3.通过 create()方法实现数据收集,该方法对于非法的字段会自动进行过滤 注意:一个 add 控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容 注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问

22、题,如果想要跳 转,找到 【数据修改操作】 save() 实现数据修改,返回受影响的记录条数 具体有两种方式实现数据修改,与添加类似(数组、 AR 方式) 1. 数组方式 a) $goods = D(“ Goods” ); b) $ar = array( goods_id =100, goods_name = lenovo手机 , goods_price =1200); c) $goods -where( goods_id50)- save($ar); 2.AR 方式 a) $goods = D(“ Goods” ); b) $goods - goods_id = 53; c) $goods

23、- goods_name = “三星手机 ”; d) $goods - goods_price = 2000; e) $goods -where( goods_price10000)-save(); 以上两种方式如果可行,即要修改全部数据 以上 sql 语句从技术上可行,从业务上不可行(事故) tp 框架有智能考虑,以上情况的sql 语句不被允许执行。 如何执行: 明确告诉系统那条sql 语句被 update更新 可以设置 where 进行 sql 语句更新操作 save() 方法返回值 0:之前没有问题,执行前后数据没有变化 自然数:受影响的记录条数 false :执行失败 数据修改具体实现

24、: 通过路由给一个操作方法传递参数 http:/网址/index.php/模块/控制器 / 方法 upd/ 变量名 1/ 值/变量名 2/ 值/变量名 3/ 值 以上路由是通过get 形式给指定的操作传递了三个参数信息 $_POST 方式也可以 原则三个参数信息接收的时候通过$_GET 接收即可 例如: $_GET 变量名 1; 以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get 参数信息 http:/网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijing function upd($name,$age,$add

25、r) $name; $age; $addr; 以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。 (除非参数有默认值) 修改商品信息步骤: 1.在“ 修改” 按钮处把被修改商品id 信息通过 get 形式传递给 upd 操作 2.在 upd 方法里边制作形式参数 $goods_id,接收服务器给传递的get 变量 goods_id 3.在修改表单里边制作隐藏域goods_id ,避免 tp 框架禁止修改语句执行 4.在 upd 操作方法内部有两个逻辑:展现表单、收集表单 【数据删除及执行原生sql 语句】 delete()返回受影响的记录条数 $goods - dele

26、te(30); 删除主键值等于30 的记录信息 $goods - delete(“ 10,12,13” ); 删除主键值等于 10 12 13的三条记录 $goods - where(“ goods_id60”)-delete() 把符合条件的记录都给删除 执行原生sql语句 1.查询语句 query() 返回一个二维数组信息 2.添加、修改、删除execute() 返回受影响的记录条数 $goods = D(“ Goods” ); $sql = “ select * from sw_goods”; $rst = $goods -query($sql); $sql = “ select goo

27、ds_category_id,avg(goods_price) from sw_goods group by goods_category_id having avg(goods_price)1000”; $goods -query($sql); $sql = “ update sw_goods set goods_name = htc_two where goods_id =100 ”; $goods -execute($sql); 【表单验证】 javascript jquery 在服务器端通过tp 框架实现表单验证 用户名、密码、重复密码、邮箱、qq 、手机号码、爱好、学历 具体步骤:

28、1.制作表单 2.表单 form 数据通过 create()方法收集 ( 验证功能要求我们必须通过create()方法收集数据 ) 3.自定义数据 model模型类实现具体验证规则 【tp 框架验证码支持使用】 ThinkPHP/Library/Think/Verify.class.php $verify = new 命名空间 Verify(); $verify - entry(); 生成一个验证码 一个单独的方法生成验证码 在模板使用: 验证是否成功: 【Session和 Cookie 】 tp 框架关于 session操作(cookie ) /session(name,value, 有效时

29、间 ) 设置 session /session(name) 获取 session /session(name,null) 删除指定 session /session(null) 清空全部 session 【tp 框架实现数据分页】 1. 我们第三方类库放的位置: 当前模块( Home )目录下,模块中的类库命名空间的根都是以模块名命名 ThinkPHP/Library/目录下,根命名空间为ThinkPHP/Library 2.在ThinkPHP/Library/Think/下面有很多类库供我们使用 3. 类的命名规则:要有命名空间,类文件名Page.class.php 4. 在控制器中实例化分页类使用: 模板页面: 【tp 框架扩展函数库】 三个位置: 1.ThinkPHP/Common/functions.php 2.应用/Common/Common/function.php 3.模块/Common/function.php 在该文件里面写自定义方法即可 【tp 框架文件上传中文乱码问题】 在 windows操作系统下: 在 ThinkPHP/Library/Think/Upload/Driver/Local.class.php 第 83 行将$filename 改为 iconv(utf-8,gb2312,$filename)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1