




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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轻量级框架,国人框架,入门容易 四、什么框架:
3、0; 一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。 框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。 五、为什么使用框架(1)框架可以帮组我们快速、稳定、高效搭建程序系统(2)该系统由于框架的使用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。(3)使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。 【使用框架】 thinkphp 3.2版本 【框架项目部署】部
4、署一个Shop项目,使用tp框架步骤:创建入口文件:1.在ThinkPHP目录下创建一个入口文件index.php 2.访问入口文件的同时系统会自动把对应的应用目录文件Shop创建出来 3.打开Home文件夹 【MVC模式】M:Model 数据模型层,负责数据操作V:View 视图层,负责显示视图C:Controller 控制器,实现业务逻辑 【控制器访问及路由解析】通过url地址get参数找到指定的控制器,并进行对应方法调用请求http:/网址/index.php?m=模块名称&c=控制器&
5、amp;a=方法以上url地址信息代码不够优雅、不安全。 tp框架url地址可以由以下四种1. http:/网址/index.php?m=XX&c=XX&a=XX 基本get模式2. http:/网址/index.php/模块/控制器/操作方法路径模式pathinfo3. http:/网址/模块/控制器/操作方法 rewrite重写模式4. http:/网址/index.php?s=/模块/控制器/方法兼容模式 具体
6、url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)URL_MODEL = 0/1/2/3 分别代表四种url地址模式 config.php是我们当前自己项目的配置文件,我们可以通过修改该文件达到配置变量的目录这个文件在系统运行过程中会覆盖convertion.php的配置变量include “convertion.php”;include “config.php”; 后引入的文件要把先引入的文件配置变量给覆盖掉 我们系统有兼容4中url地址模式的使用系统有的时候会自动创建url地址,它会根据
7、当前模式进行url地址创建使用快捷函数U(); 创建url地址 通过url地址模式我们学习到了以下内容:1. 我们学习到了配置变量(核心配置变量conversion.php、当前应用配置变量config.php)2. 快捷函数U(“模块/控制器/方法”) 根据参数和url模式创建对应的url地址3. 把框架的模式调整为开发调试模式 【开发、生产模式】开发调试模式:系统需要加载大概24个文件 index.php define(“APP_DEBUG”,true);生产模式:系统只需要加载很少的大概7个文件在入口文件in
8、dex.php中定义: define(“APP_DEBUG”,false);节省了许多文件的开发、关闭的系统开销,节省资源 要在页面显示trace信息,需要在自己的配置文件中: 【控制器和对应方法创建】控制器是MVC模式中的核心,tp默认有一个Index控制器: Index控制器里面有一个操作方法:Index 我们在访问http:/localhost:8080/Thinkphp/index.php入口文件的时候,会默认访问Index控制器下面的Index方法 如果要自己创建一个控制器Login:1.在ShopHomeControll
9、er文件夹下新建一个控制器文件LoginController.class.php注意:文件命名规则,按照驼峰法命名 2.打开该文件,在里面造控制器Login类 3.如果要自定义操作方法,在控制器Login类里面加一个函数Login(): 这样我们就完成了控制器和操作方法的建立,如果要访问我们刚才的Login控制器下的Login方法: 4.控制器中如果要调用视图层中的模板: 这样再次访问,会发现报错: 原因:模板文件没有创建,这时候我们就要去创建模板文件 【视图模板文件创建】视图模板文件存放发位置在:&
10、#160; 里面没有模板文件如果我们想要访问Login控制器中的Login方法,首先我们要创建一个Login控制器对应的模板文件夹,该文件夹就对应着Login控制器: 然后在Login文件夹下再创建一个login.html的模板文件来对应Login控制器下的Login方法: 在login.html里面写入要显示的代码: 然后再次请求: 【url地址大小写设置】默认是不敏感的:在config.php里边对url大小写敏感进行设置 【空操作和空控制器处理】空操作:就没有指定的操作方法空控制器
11、:没有指定控制器http:/网址/index.php/Home/User/loginhttp:/网址/index.php/Home/User/hello空操作http:/网址/index.php/Home/beijing/login 空控制器空操作: 一般网站处于安全考虑不给用户提示任何错误信息 “空操作”本质意思:一个对象(控制器)调用本身不存在的方法 在OOP里边,对象调用本身不存在方法,处于用户体验比
12、较好的角度考虑,我们可以在类里边制作一个魔术方法:function _call(); 在tp里面控制器的父类: 父类中有个方法: 所以空操作有两种解决方案: 在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用) 给空操作的名称制作一个同名的模板出来,系统会自动调用 空控制器: 空控制器:在实例化控制器对象的时候,没有找到指定的类什么时候实例化控制器对象:Thin
13、kPHP/Library/Think/App.class.php熟记文件: index.php 入口文件 ThinkPHP/ThinkPHP.php 框架核心文件
14、60; ThinkPHP/Library/Think/Think.class.php 框架核心文件 ThinkPHP/Library/Think/App.class.php 框架应用文件在App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容: 空控制器处理方案:可以再制作一个控制器,名称EmptyController.c
15、lass.php在该控制器内部其实只需要制作一个_empty()方法即可。 这样再次请求: 【项目分组】系统有前台用户操作界面系统还有后台供公司内部人员使用维护平台两者在使用的过程中就是对“控制器”、“视图模板”、“model模型”的操作。为了系统开发方便,及代码部署更加合理,我们的控制器、view视图等前后台文件不要混在起,要在物理结构上给分开 http:/网址/index.php/Home/控制器/操作方法访问Home控制器及制定操作http:/网址/index.php/Admin/控制器/操作方法访问Admin分组的控制器和操作方法 【系统常量信息
16、】获取系统常量信息: 如果加参数true,会分组显示: 【跨控制器调用】一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。跨控制器调用可以节省我们代码的工作量在Main控制器中有一个Info操作方法 想要在其它控制器,比如Login中调用,我们可以实例化控制器对象,调用里面的方法即可: 造对象有快捷函数供我们使用:A(“模块/控制器标志”) 实例化控制器对象 R(模块/控制器标志/操作方法) 实例化对象同时调用指定方法 【连接数据库配置及M
17、odel数据模型层】convertion.phpconfig.php1.在config.php做数据库连接配置 2.制作model模型a) model本身就是一个类文件b) 数据库中的每个数据表都对应一个model模型文件c) 最简单的数据model模型类 3.字段缓存设置tp框架执行过程中会使用到数据
18、表中的字段信息,通过sql语句可以查询”show colums from table”,处于性能考虑,可以把字段缓存,避免每次重复执行sql语句。4.可以根据情况对当前的model模型进行个性化设置 实例化Model的三种方式:1. $goods = new 命名空间GoodsModel(); 2. $goods = D(模型标志); a) $goods = D(“Goods”);b) &
19、#160; 该$goods是父类Model的对象,但是操作的数据表还是sw_goodsc) $obj = D(); 实例化Model对象,没有具体操作数据表,与M()方法效果一致1. $obj = M();a) 实例化父类Modelb) 可以直接调用父类Model
20、里边的属性,获得数据库相关操作c) 自定义model就是一个空壳,没有必要实例化自定义modeld) $obj = M(数据表标志); 实例化Model对象,实际操作具体的数据表$obj = D(标志);$obj = D();$obj = M(标志);$obj = M();D()和M()方法的区别:前者是tp3.1.3里边对new操作的简化方法;后者在使用就是实例化Model父类 &
21、#160; 两者都在函数库文件定义ThinkPHP/mon/functions.php 注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。【数据查询】select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组信息,当前数据表的全部数据信息$obj = D(); 创建对象$obj -> select(); 查询数据sel
22、ect 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条数;SELECT%DISTINCT%FIELD%FROM %TABLE%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT% %UNION%COMMENT% $obj ->field(字段,字段); 查询指定字段$obj ->table(数据表); 设置具体操作数据表$obj ->
23、;where(参数); 参数就是正常sql语句where后边的条件信息例如:( “goods_price >100 and goods_name like 三%”)$obj ->group(字段); 根据字段进行分组查询$obj ->having(参数条件); having 条件设置$obj ->order(price desc/asc) 排序查询$obj ->limit(偏移量,条数) 限制查询的条数 sql语句里边具体的条件设置在tp框架model模型里边
24、体现为具体的方法操作 以上方法理论上是父类Model的对应方法父类model具体存在方法:field() where() limit()还有一些方法在_call()自动调用函数里边: table() group() order() having() 在_call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行。 以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)$obj ->
25、; limit(5)->field(id,name)->order(price asc) -> table(sw_goods)->select();以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性options里边,最后根据options拼装sql语句。 $info = $goods -> where()->field(字段)->select();select()方法1 返回一个二维数组信息2 返回全部数据表信息3 &
26、#160; 给该方法传递参数a) select(30) 查询主键值等于30的记录信息b) select(“10,12,14”) 查询主键值在10、12、14范围的记录信息4.find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法 5.having()方法设置查询条件,where
27、()设置查询条件6. 相关聚合函数 count() sum() avg() max() min() 以上聚合函数是最后被调用的方法 以上方法可以结合具体条件方法使用 例如:$goods -> where(goods_price >1000)->count(); 大于1000元的商品
28、的总数目 【数据添加】add()该方法返回被添加的新记录的主键id值两种方式实现数据添加1.数组方式数据添加$goods = D(“Goods”);$arr = array(goods_name=>iphone5s,goods_weight=>109);/注意:goods_name和goods_weight是数据表中字段名称$goods -> add($arr); 2.AR方式实现数据添加a) ActiveRecord 活跃记录b)
29、60; AR规定了程序与数据库之间的关系c) 什么是AR:d) 一个数据表对应一个类modele) 一条数据记录对应类的一个对象f) 每个字段对应该对象的具体属性g)&
30、#160; tp框架的AR是假的$goods = D(“Goods”);$goods -> goods_name = “htc_one”;$goods -> goods_price = 3000;$goods -> add();以上两种方式:数组、AR,最后add都要把新记录的主键id值返回 【收集表单数据入库操作】1. 制作一个表单2. 通过$_POST收集信息3. 通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤注意:一个add控制器实现两个逻辑,一个是打出添加页面,
31、一个是向数据库添加内容 注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到 【数据修改操作】save() 实现数据修改,返回受影响的记录条数具体有两种方式实现数据修改,与添加类似(数组、AR方式)1.数组方式a) $goods = D(“Goods”);b) $ar = array(goods_
32、id=>100,goods_name=>lenovo手机,goods_price=>1200);c) $goods ->where(goods_id>50)-> save($ar);2.AR方式a) $goods = D(“Goods”);b) $goods -> goods_id
33、 = 53;c) $goods -> goods_name = “三星手机”;d) $goods -> goods_price = 2000;e) $goods ->where(goods_price>10000)->save();以上两种方式如果可行,即要修改全部数据以上sql语句从技术上可
34、行,从业务上不可行(事故)tp框架有智能考虑,以上情况的sql语句不被允许执行。如何执行: 明确告诉系统那条sql语句被update更新 可以设置where进行sql语句更新操作 save() 方法返回值0:之前没有问题,执行前后数据没有变化自然数:受影响的记录条数false:执行失败 数据修改具体实现:通过路由给一个操作方法传递参数http:/网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值以上路由是通过get形式给指定的
35、操作传递了三个参数信息$_POST方式也可以原则三个参数信息接收的时候通过$_GET接收即可例如:$_GET变量名1; 以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get参数信息http:/网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijingfunction upd($name,$age,$addr) $name; $age;
36、; $addr;以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。(除非参数有默认值) 修改商品信息步骤:1. 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作2. 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id3. 在修改表单里边制作隐藏域goods_id,避免tp框架禁止修改语句执行4. 在upd操作方法内部有两个逻辑:展现表单、收集表单 【数据删除及执行原生sql语句】delete()返回受影响的记录条数$goods -> de
37、lete(30); 删除主键值等于30的记录信息$goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录$goods -> where(“goods_id>60”)->delete() 把符合条件的记录都给删除 执行原生sql语句1. 查询语句query() 返回一个二维数组信息2. 添加、修改、删除 execute() 返回受影响的记录条数$goods = D(“Goods”);$sql = “select * from sw_goods”;$rst = $goods ->query($sql); $sql = “select goods_category_id,avg(goods_price) from sw_go
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级生物上册第一单元我们身边的生命世界第三章形形色色的植物第六节被子植物第二课时单子叶植物教案新版冀教版
- 二年级科学上册第二单元小小游乐园1滑梯教学设计大象版
- 2024花艺师考试科目人体感受试题及答案
- 新课标2024-2025学年高中英语课时分层作业8SectionⅡ含解析新人教版选修7
- 农业职业经理人考试的价值展望试题及答案
- 语言沟通能力考查试题及答案
- 农艺师考试知识共享平台的建立与评价标准探讨试题及答案
- 八年级英语上册 Unit 2 Keeping Healthy Topic 1 You should brush your teeth twice a day Section C教学设计 (新版)仁爱版
- 人教版八年级信息技术下第一单元第一课第一课第二课时初识画图教学设计
- 食品安全相关岗位职责试题及答案
- 2025年中国光纤放大器行业竞争格局及市场发展潜力预测报告
- 护理礼仪中的称呼礼仪
- 校长在高考动员大会上讲话:高考不是独木桥人生处处有航道
- 新版《医疗器械经营质量管理规范》(2024)培训试题及答案
- 2025年初级社会工作者综合能力全国考试题库(含答案)
- 医药企业价格和营销行为信用承诺书
- 消防系统(联动)控制逻辑关系说明
- 2015年河南高考文科数学试题及答案
- 日语作文稿纸
- 最新mywife系列全部姓名资料
- 暖通设备公司喷粉前处理涂装生产线投标文件技术文件
评论
0/150
提交评论