tp框架学习笔记啊_第1页
tp框架学习笔记啊_第2页
tp框架学习笔记啊_第3页
tp框架学习笔记啊_第4页
tp框架学习笔记啊_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、php语言公司发布的官方框架,重量级(功能多)2. yii 美国华人开发的框架,xue qiang, qiang, 重量级框架,纯OOP框架3. CI CodeIgniter 轻量级框架,开发速度快,部署灵活4. cakephp 外国框架,重量级,速度慢5. symfony 外国重量级框架6. ThinkPHP 轻量级框架,国人框架,入门容易什么框架:一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。为什么使用框架l 框架可以帮组我们快速、稳定、高效搭建程序系统l 该系统由于框架的使

3、用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。l 使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。【使用框架】thinkphp 3.2版本【框架项目部署】shop商城项目book图书管理系统car汽车销售系统三个项目可以使用一个公共的tp框架。步骤:1. 创建一个入口文件index.php2. 项目自动创建目录3. 访问入口文件的同时系统会自动把对应的文件创建出来【控制器和对应方法创建】【路由解析】通过url地址get参数找到指定的控制器,并进行对应方法调用请求http:/网址/index.php?m=模块名称&c=控制器&a=方

4、法以上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=/模块/控制器/方法 兼容模式具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)URL_MODEL = 0/1/2/3 分别代表四种url地址模式config.php是我们

5、当前自己项目的配置文件,我们可以通过修改该文件达到配置变量的目录这个文件在系统运行过程中会覆盖convertion.php的配置变量include “convertion.php”;include “config.php”; 后引入的文件要把先引入的文件配置变量给覆盖掉我们系统有兼容4中url地址模式的使用系统有的时候会自动创建url地址,它会根据当前模式进行url地址创建使用U(); 创建url地址在入口文件index.php调整当前模式为开发调试模式:通过url地址模式我们学习到了以下内容:1. 我们学习到了配置变量(核心配置变量conversion.php、当前应用配置变量config.

6、php)2. 快捷函数U(“模块/控制器/方法”) 根据参数和url模式 创建对应的url地址3. 把框架的模式调整为开发调试模式【开发、生产模式】开发调试模式:系统需要加载24个文件 index.php define(“APP_DEBUG”,true);生产模式:系统只需要加载很少的7个文件 index.php define(“APP_DEBUG”,false);节省了许多文件的开发、关闭的系统开销,节省资源观察系统运行过程中生成的日志信息:1. 做变量配置,convertion.php , config.php2. tp框架配置变量:convertion.php Behavior行为文件

7、程序灵活设置Behavior 行为:ThinkPHP/Library/Behavior/*$option里边的信息是可以直接通过config.php进行修改的【控制器调用视图view模板】控制器-视图APP_DEBUG = true; 调试模式错误信息显示更详细控制器和模板的关系通常:在view目录通常会有一个与控制器标志一样的目录,里边有具体模板文件例如GoodsController.class.php 控制 在view目录有Goods目录,里边都是Goods控制器对应的模板文件【视图模板与项目进行整合】1. 引入静态代码2. 引入css、image、jsa) 以上3样东西,浏览器需要发送单

8、独的http请求b)引入css的时候,以User控制器标志作为当前目录,显然不行以上目录设置不利于后期维护,例如其中的目录有修改,就需要全部都修改,有很多重复劳动优化后:利用常量把路径给定义好,后期只维护一个常量即可tp框架默认引擎的常量使用模板与tp框架整合1. 引入静态代码2. 引入css、img、js文件3. 在入口文件地方把css、img、js的路径设置常量4. 在模板中通过常量获得具体的css、img等文件信息(后期重复步骤)5. 把css文件本身的图片路径设置正确(获得图片的相对位置是本身自己css文件)【url地址大小写设置】在config.php里边对url大小写敏感进行设置引

9、入文件:include “hello.php”; include(“Hello.php”); 实际都会把指定文件找到hello.phptp框架本身自己做了额外设置 :include (“hello.php”) include “Hello.php”; 表示需要引入两个不同文件总结:1. 创建应用index.php入口文件2. 创建控制器和视图模板3. 控制器和真实模板进行整合(css img js)4. 配置文件:a) convertion.phpb) config.php shop/Common/Conf/config.php (针对所有分组模块都起作用)c) config.php shop

10、/Home/Common/Conf/config.php (针对Home分组模块起作用)【空操作和空控制器使用】空操作:就没有指定的操作方法空控制器:没有指定控制器http:/网址/index.php/Home/User/loginhttp:/网址/index.php/Home/User/hello 空操作http:/网址/index.php/Home/beijing/login 空控制器空操作:一般网站处于安全考虑不给用户提示任何错误信息“空操作”本质意思:一个对象(控制器)调用本身不存在的方法在OOP里边,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方

11、法:function _call();普通控制器父类的位置:空操作有两种解决方案: 在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用) 给空操作的名称制作一个同名的模板出来,系统会自动调用空控制器http:/网址/index.php/Home/tianjin/login空控制器:在实例化控制器对象的时候,没有找到指定的类什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php熟记文件:index.php 入口文件ThinkPHP/ThinkPHP.php 框架核心文件ThinkPHP/Librar

12、y/Think/Think.class.php 框架核心文件ThinkPHP/Library/Think/App.class.php 框架应用文件App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容。快捷操作方法:空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php在该控制器内部其实只需要制作一个_empty()方法即可。【项目分组】系统有前台用户操作界面系统还有后台供公司内部人员使用维护平台两者在使用的过程中就是对“控制器”、“视图模板”、“model模型”的操作为了系统开发方便,及代码部署更加合理,我们的控制器、view

13、视图等前后台文件不要混在起,要在物理结构上给分开http:/网址/index.php/Home/控制器/操作方法 访问Home控制器及制定操作http:/网址/index.php/Admin/控制器/操作方法 访问Admin分组的控制器和操作方法【后台登录页面与框架整合】控制器:ManagerController.class.phpfunction login()为后台静态资源目录创建常量【后台品字形框架页面搭建】控制器:IndexController.class.php操作方法:head() left() right() index()注意:frame的src属性通过独立路由进行设置获得系统

14、常量信息以上错误信息是tp框架给我们封装好的错误信息,我们更喜欢看我们传统的错误信息调整文件 ThinkPHP/Library/Think/Think.class.php内容如下:把以上三行给注释掉,以后看到的错误就是传统的错误信息行为:ThinkPHP/Library/Behavior/ContentReplaceBehavior.class.php进行的替换【跨控制器调用】一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。跨控制器调用可以节省我们代码的工作量例如:有10个页面,都要现实指定的数据信息显示。比如我们网站的“会员数目有200万”,这个信息需要在10个页面

15、都显示这个数据是通过UserController.class.php 里边额方法number()给查询出来的现在商品列表页面也需要显示200万会员数目信息,那么原则上就是GoodsController.class.php里边也有一个方法number()专门获得会员数目的如果许多页面都需要显示200万的会员数据,则许多控制器都需要有number()方法。如果大家都能实例化User控制器,并调用它的number()方法,则会节省许多重复劳动。系统函数库:ThinkPHP/Common/functions.phpA(“模块/控制器标志”) 实例化控制器对象R(模块/控制器标志/操作方法) 实例化对象

16、同时调用指定方法【框架执行流程分析】tp框架内部代码集成:面向过程和OOP面向对象1. index.php 入口文件2. ThinkPHP/ThinkPHP.php 在php5.3版本以后 设置常量有两种方式: const name = value; 作用域根据当前命名空间决定 define() 作用域全局 定义了许多常量 引入核心文件Think.class.php Think:start();3. ThinkPHP/Library/Think/Think.class.php static function start() 引入系统核心文件 引入配置文件 如果是生成模式,还会生成commonr

17、untime.php文件 如果是第一次使用系统,还会自动创建对应的应用目录 App:run();4. ThinkPHP/library/Think/App.class.php static function run() App:init(); 路由解析 /路由解析,把模块、控制器、方法赋予常量 /MODULE_NAME = 模块名称 /CONTROLLER_NAME 控制器 /ACTION_NAME 方法 App:exec() 实例化控制器对象 利用“反射”实现对象调用方法利用反射实现对象调用方法:面向对象的高级方法总结:1. 空操作和空控制器处理2. 模块项目分组Home Admina) h

18、ttp:/网址/index.php/模块/控制器/操作方法 3. 后台登陆和品字形框架frameset frame src4. 跨控制器调用A()R()5. 执行流程分析(不要求)作业:1. 把商城模板 和 tp框架进行整合2. 把商城模板 的后台在tp框架中搭建起来(模块项目分组Home Admin)2014-1-20 昨天内容回顾1. 创建应用项目a) 入口文件index.phpb) 应用常量定义define(“CSS_URL”,XXX);c) define(“APP_DEBUG”,true); 调整模式为开发调试模式 加载25文件d) 包含核心程序ThinkPHP/ThinkPHP.ph

19、p2. 控制器和视图创建a) UserController.class.php(命名空间)b) Home/View/User/login.htmlc) Home/View/User_login.html (在配置文件convertion.php里边有定义控制器和模板中间的连接符)d) Home/View/User_register.html3. 路由解析a) index.php?m=XX&c=YY&a=ZZ 基本get模式b) index.php/XX/YY/ZZ pathinfo路径模式c) 网址/XX/YY/ZZ rewrite重写模式,index.php被省略d) ind

20、ex.php?s=/XX/YY/ZZ 兼容模式e) echo U(“控制器/操作方法”); 查看具体url路由解析模式4. 配置文件(核心、公共、分组模块)及函数库文件a) 核心:ThinkPHP/Conf/convertion.phpb) 公共:shop/Common/Conf/config.phpc) 分组模块:shop/Home/Conf/config.phpd) 上边三个配置文件后边的配置变量会覆盖前边的配置变量e) 函数库文件:f) 核心:ThinkPHP/Common/functions.phpg) 公共:shop/Common/Common/function.phph) 分组模块

21、:shop/Home/Common/function.php5. 模板与tp框架整合a) 拷贝模板代码到tp框架view目录b) 拷贝css、img、js静态资源到tp指定目录(shop/public)c) 在入口文件处把css、img、js路径定义为常量d) 在模板中通过常量把静态资源引入$Think.const.常量名e) 调整css文件里边的图片路径f) 常量使用注意:在入口文件是先定义常量,再引入核心文件ThinkPHP.php6. 空操作和空控制器处理a) 空操作:在控制器中定义方法function _empty($m, $arg)b) 空控制器:定义控制器EmptyControll

22、er.class.php _empty()方法7. 项目分组a) Home Admin分组8. 跨控制器调用a) A(“分组模块/控制器标志”) 实例化控制器b) R(“分组模块/控制器标志/操作方法”) 实例化控制器同时直接调用指定方法c) new UserController(); 直接实例化指定的控制器9. 后台“品”字形页面搭建a) head left rightb) index (frameset)c) frame 里边 src= 通过独立路由进行请求数据模型model应用mysql数据库操作(增、删、改、查)【连接数据库配置】convertion.phpconfig.php1. 在

23、config.php做数据库连接配置2. 制作model模型a) model本身就是一个类文件b) 数据库中的每个数据表都对应一个model模型文件c) 最简单的数据model模型类3. 字段缓存设置tp框架执行过程中会使用到数据表中的字段信息,通过sql语句可以查询”show colums from table” ,处于性能考虑,可以把字段缓存,避免每次重复执行sql语句。4. 可以根据情况对当前的model模型进行个性化设置5. 在入口文件定义一个调试输出函数,便于系统开发使用【实例化model的三种方式】1. $goods = new 命名空间GoodsModel(); 2. $good

24、s = D(模型标志); a) $goods = D(“Goods”);b) 该$goods是父类Model的对象,但是操作的数据表还是sw_goodsc) $obj = D(); 实例化Model对象,没有具体操作数据表,与M()方法效果一致3. $obj = M(); a) 实例化父类Modelb) 可以直接调用父类Model里边的属性,获得数据库相关操作c) 自定义model就是一个空壳,没有必要实例化自定义modeld) $obj = M(数据表标志); 实例化Model对象,实际操作具体的数据表$obj = D(标志);$obj = D();$obj = M(标志);$obj = M

25、();D()和M()方法的区别:前者是tp3.1.3里边对new操作的简化方法;后者在使用就是实例化Model父类两者都在函数库文件定义ThinkPHP/Common/functions.php注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。【数据查询】select()是数据模型的一个指定方法,可以获得数据表的数据信息返回一个二维数组信息,当前数据表的全部数据信息1. 配置smartya) 配置变量信息 i. convertion.phpii. Behavior行为配置变量信息(页面底部

26、日志显示配置、smarty配置)iii. 系统程序里边有一些零散的配置信息 b) 在config.php里边配置smarty使用设置模板引擎配置参数位置(不能直接修改,在config.php里边重写):2. 具体使用(从tp引擎变为smarty引擎)a) css样式如果有,需要使用literal标签禁止smarty解析b) 关键字$Think 变为 $smartyc) tp引擎会对关键常量进行替换例如:_CONTROLLER_ _MODULE_smarty引擎不给替换,需要设置为:$smarty.const._CONTROLLER_【各种查询条件设置】$obj = D(); 创建对象$obj

27、-> select(); 查询数据select 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条数;SELECT%DISTINCT%FIELD%FROM %TABLE%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT% %UNION%COMMENT%$obj -> field(字段,字段); 查询指定字段$obj -> table(数据表); 设置具体操作数据表$obj -> where(参数); 参数就是正常sql语句where后边的条件信息例如:( “goods_price

28、 >100 and goods_name like 三%”)$obj -> group(字段); 根据字段进行分组查询$obj -> having(参数条件); having 条件设置$obj -> order(price desc/asc) 排序查询$obj -> limit(偏移量,条数) 限制查询的条数sql语句里边具体的条件设置在tp框架model模型里边体现为具体的方法操作以上方法理论上是父类Model的对应方法父类model具体存在方法: field() where() limit()还有一些方法在_call()自动调用函数里边: table() gr

29、oup() order() having()在_call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)$obj -> limit(5)->field(id,name)->order(price asc) -> table(sw_goods)->select();以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性options里边,最后根据options拼装sql语句。select()方法原理追踪总结:1. config.php做数

30、据库连接配置convertion.php2. 制作model模型文件3. 实例化model模型对象a) new 命名空间类名b) D(模型标志);c) M(模型标志); 4. 数据查询select()5. 各种查询条件设置方法6. smarty模板引擎切换(Behavior行为里边的配置变量)【查询数据信息】$info = $goods -> where()->field(字段)->select();select()方法1 返回一个二维数组信息2 返回全部数据表信息3 给该方法传递参数 a) select(30) 查询主键值等于30的记录信息b) select(“10,12,

31、14”) 查询主键值在10、12、14范围的记录信息4. find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法5. having()方法设置查询条件,where()设置查询条件having 和 where区别i. 使用有先后顺序ii. where price>100 having price>100iii. where 设置条件,字段必须是数据表中存在的字段 iv. having 设置条件,字段必须是select语句查询出来的字段可以使用6. 相关聚合函数 count() sum()

32、avg() max() min()以上聚合函数是最后被调用的方法以上方法可以结合具体条件方法使用例如:$goods -> where(goods_price >1000)->count(); 大于1000元的商品的总数目【实现数据添加add】select()add() 该方法返回被添加的新记录的主键id值save()delete()两种方式实现数据添加1. 数组方式数据添加$goods = D(“Goods”);$arr = array(goods_name=>iphone5s,goods_weight=>109);/注意:goods_name和goods_wei

33、ght是数据表中字段名称$goods -> add($arr);2. AR方式实现数据添加a) ActiveRecord 活跃记录b) AR规定了程序与数据库之间的关系c) 什么是AR:d) 一个数据表对应一个类modele) 一条数据记录对应类的一个对象f) 每个字段对应该对象的具体属性g) tp框架的AR是假的$goods = D(“Goods”);$goods -> goods_name = “htc_one”;$goods -> goods_price = 3000;$goods -> add();以上两种方式:数组、AR,最后add都要把新记录的主键id值返回

34、【收集表单数据入库操作】1. 制作一个表单2. 通过$_POST收集信息3. 通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤4. 在create()收集表单方法内部会自动过滤非法的字段信息【数据修改操作】select()add()save() 实现数据修改,返回受影响的记录条数delete()具体有两种方式实现数据修改,与添加类似(数组、AR方式)1. 数组方式a) $goods = D(“Goods”);b) $ar = array(goods_id=>100,goods_name=>lenovo手机,goods_price=>1200);c) $

35、goods ->where(goods_id>50)-> save($ar);2. AR方式a) $goods = D(“Goods”);b) $goods -> goods_id = 53;c) $goods -> goods_name = “三星手机”;d) $goods -> goods_price = 2000;e) $goods -> where(goods_price>10000)->save();以上两种方式如果可行,即要修改全部数据以上sql语句从技术上可行,从业务上不可行(事故)tp框架有智能考虑,以上情况的sql语句不被

36、允许执行。如何执行: 明确告诉系统那条sql语句被update更新 可以设置where进行sql语句更新操作save() 方法返回值0:之前没有问题,执行前后数据没有变化自然数:受影响的记录条数false:执行失败【数据删除及执行原生sql语句】select()add()save() delete() 返回受影响的记录条数$goods -> delete(30); 删除主键值等于30的记录信息$goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录$goods -> where(“goods_id>60”)->delet

37、e() 把符合条件的记录都给删除执行原生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_goods group by goods_category_id having avg(goods_price)>1000”;$goods -&g

38、t; query($sql);$sql = “update sw_goods set goods_name = htc_two where goods_id=100”;$goods -> execute($sql);【数据修改具体实现】通过路由给一个操作方法传递参数http:/网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值 以上路由是通过get形式给指定的操作传递了三个参数信息原则三个参数信息接收的时候通过$_GET接收即可例如:$_GET变量名1; include()以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get参

39、数信息http:/网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijingfunction upd($name,$age,$addr)$name;$age;$addr;以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。(除非参数有默认值)修改商品信息步骤:1. 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作2. 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id3. 在修改表单里边制作隐藏域goods_id,避免tp框架禁止修改语句执行4. 在upd操

40、作方法内部有两个逻辑:展现表单、收集表单【表单验证】javascriptjquery 在服务器端通过tp框架实现表单验证用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历具体步骤:1. 制作表单2. 表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据)3. 自定义数据model模型类实现具体验证规则验证规则的第4个参数说明(0 1 2):注意:1. 模型实例化通过new2. 调用create()方法才可以触发验证执行总结:1. 数据添加add() 两种方式:数组、AR2. 数据修改a) 注意:需要设置条件(主键id、where)3. 删除删

41、除 delete()4. 执行原生sql语句:query() execute()5. 给操作方法传递参数 /Admin/User/login/id/100/name/toma) function login($id,$name)6. 表单验证作业:1. 在商城后台实现数据的列表查询、删除、添加、修改2014-1-21 昨天内容回顾1. 3种实例化model模型方法a) new 命名空间GoodsModel();b) D(“模型标志Goods”) (之前版本会实例化自定义model对象,目前都实例化Model基类对象)i. 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作g

42、oods数据表c) M(“模型标志Goods”)i. 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作goods数据表2. 数据库查询及连贯操作查询a) select()b) select(10) 主键值等于10的记录c) select(“20,21,22”) 主键值 in 20,21,22 的三条记录d) find(4) 主键值等于4的记录e) select()方法返回二维数组,find方法返回一维数组f) 连贯操作查询方法:g) field() where() limit() 父类Model已经定义好的方法h) table() group() order() grou

43、p() having() 统一在魔术方法_call()里边声明i) 以上方法可以连续操作执行,使用没有顺序要求j) $obj -> limit(5)->where(price>100)->order(id desc)->select();3. 聚合函数使用a) count() sum() max() min() avg()b) 以上方法也是在Model的魔术方法_call()里边定义4. 添加数据记录add()a) 两种方式:数组、AR操作5. 修改数据信息savea) 两种方式:数组、AR操作b) 注意:为了修改成功必须有两个条件之一被设置i. 信息里边有主键值

44、id值被修改ii. 可以通过where设置具体哪些记录被修改6. 删除数据deletea) $goods -> delete(10) 主键值等于10的记录信息b) $goods -> delete(“10,12,13”) 删除三条记录主键值 in 10,12,13c) $goods -> where(id>100)->delete() id>100的记录都被删除7. 原生sql语句执行a) query() 执行查询语句,返回二维数组信息b) execute() 执行增加、修改、删除,返回受影响的记录数目,返回false表示sql语句有错误,返回0表示sql语

45、句执行前后对数据没有改变8. 表单验证a) 在自定义模型里边重写$_validateb) $_validate属性定义时一个数组信息,内部每个小的单元还是一个数组c) array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)d) 验证规则:require、emaile) 验证条件:i. 0 字段在$_POST里边存在就验证 ii. 1 必须验证iii. 2 值不为空才验证f)附加规则:regex in callback 【用户注册完善】implode()把数组元素用逗号给合并起来代码部分:【命名空间】namespace在php里边,同一个应用请求里边如果存在两个方法(类名),他们的

46、名字一样(例如都是getName()),由于php本身语法规则的限制,系统是要报错的解决方法: 把他们的名字改为不一样的 例如 agetName() bgetName() 通过命名空间解决Yii 框架为了避免名字重复引起问题,同步的类前边都有 C 字样1. 简单应用a) 命名空间是虚拟的定义空间,不是真实存在目录b) 命名空间的分隔符都是反斜杠 c) 非限定名称:getName() 获得与其最近的命名空间的getName()d) 限定名称:beijinggetName() 相对方式 通过最近的命名空间定位beijinggetName()e) 完全限定名称: beijinggetName() 直

47、接在指定的命名空间获得具体元素f) 命名空间针对:函数、类名、常量三者其作用,在命名空间里边把这三种统称为元素2. 子空间应用3. 别名和导入a) 导入/引入 useb) 使用一个元素,使用非限定名称,在当前最接近的空间里边获得元素c) 如果当前空间里边没有指定元素,也可以在导入的空间里边寻找d)e) 别名应用:f) 如果在引入空间的时候也把元素给引入了,在当前的空间里边也有同名字的元素,那么这个外来的元素和内部元素要有冲突,这时可以通过别名定义来重新给外来的元素起名字并使用g)4. 公共空间a) 第一种情况b) 没有使用namespace定义空间,当前空间就是一个公共空间c) 例如一个有na

48、mespace的文件引入了一个没有namespace的文件程序d) 没有namespace的文件空间就是公共空间e) 在namespace文件里边可以通过斜杠直接访问公共空间元素f) function getName() -公共空间的元素g) namespace beijing;h) function getName() -beijing空间的元素i) 第二种情况j) 当前文件没有namespace、但是引入的文件有namespacek) 当前文件就是公共空间,引入文件有自己空间公共空间有两种情况:1. 当前有空间,引入没有空间(公共空间)a) 默认使用当前空间的元素b) 统一斜杠引入公共空间

49、元素2. 当前没有空间(公共空间),引入有空间a) 默认调用当前公共空间的元素(非限定名称)b) 使用有公共空间的元素 (限定名称、完全限定名称)同一个页面里边有许多空间,在页面最下边使用上边空间的元素,名称需要使用完全限定名称,还可以把上边空间的元素给use引入过来也可通过非限定名称或限定名称使用命名空间使用注意:1. 针对类名、函数名、常量const其作用 define()定义的常量不受命名空间限制2. 声明namespace的当前脚本的第一个命名空间前面不能有任何代码(header头代码也要写在下边)3. 命名空间是虚拟抽象的空间,不是真实存在的目录4. 当前文件可以include具有命

50、名空间的文件,默认空间是当前文件的公共空间5. 元素调用分:非限定名称、限定名称、完全限定名称简单使用:同一个页面定义了许多单级命名空间子空间:通过斜杠定义多级命名空间公共空间:为了程序比较严谨,公共空间的元素都使用斜杠访问空间引入和别名:use as【tp框架对多语言的支持】多语言设置就是通过get参数告诉当前的请求使用何种语言第一次使用get变量传递语言,之后语言还会保存在cookie里边,供下次使用如果get没有传递语言,浏览器会根据当前地区选中对应的语言,我们程序也可以读取浏览器的对应的语言变量选择对应的语言设置步骤:1. 多语言通过行为Behavior支持2. 语言包一共有4种,后定

51、义的要覆盖先定义的(类似配置文件config.php覆盖convertion.php)3. 在config.php里边开启多语言支持4. 确保行为Behavior代码执行a) 手动启动该CheckLangBehavior行为b) shop/Common/Conf/tags.php5. 语言包4个等级6. 获得语言变量信息a) L()快捷函数,可以获得全部或指定语言变量b) 使用语言,获得全部语言,assign()传递语言变量到模板进行具体使用c) $Think.language.名称7. 每个语言自己对应具体的一个文件总结:1. 命名空间i. namespace use ii. 非限定名称(当

52、前空间元素) 限定名称(相对空间的元素) 完全限定名称(绝对定位元素)iii. 简单使用(同一个文件定义许多命名空间)iv. 子空间(多级命名空间)v. 引入空间:空间和元素都引入、只引入空间vi. 别名使用:vii. 公共空间2. 多语言【tp框架验证码支持使用】ThinkPHP/Library/Think/Verify.class.php$verify = new 命名空间Verify();$verify -> entry(); 生成一个验证码一个单独的方法生成验证码验证码需要在模板中使用<img src=”路由地址Manager/verifyImg” alt=” />验

53、证输入的验证码是否正确本身验证码信息存储在session里边session存储的验证码是加密后的数据Verify类给我们提供了一个方法进行验证码的有效性验证$verify -> check(用户输入验证码); 返回真,表示验证码正确【用户登录实现】Manager判断用户名、密码是否是正确的,如果是正确的,再把信息存入session里边表示是登录状态旧的解决方案:select * from sw_manager where name=$name and pwd = $pwd;同时查询用户名和密码的信息记录,如果存在就是正确的,否则用户名或密码错误该方式不安全,会增加sql语句注入的风险现在流行的解决方案:select * from sw_manager where

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论