《2023年thinkphp学习笔记.doc》由会员分享,可在线阅读,更多相关《2023年thinkphp学习笔记.doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、框架文献介绍二、创建应用 1.在项目目录创建入口文献 2.创建虚拟主机,访问应用三、路由形式 1.什么是路由答:系统从URl参数中分析出当前请求分组、控制器和操作的过程就是“路由”。 2.Tp框架路由共有4种形式 基本get形式http:/网址/index.php?m=分组&c=控制器&a=操作方法该方式是最底层的get形式、传统的参数传递方式,不时尚、不安全。 pathinfo途径形式默认方式http:/网址/index.php/分组/控制器/操作方法http:/网址/index.php/Home/Index/advert rewrite重写形式(伪静态技术)省略index.php入口文
2、献http:/网址/分组/控制器/操作方法http:/网址/Home/Index/index 兼容形式http:/网址/index.php?s=/分组/控制器/操作方法http:/网址/index.php?s=/Home/Index/advert以上四种形式除了第种,其他的url模式都可以使用四、 创建控制器五、 View视图模板入口程序文献index.php 路由解析(控制器、操作方法)controller控制器controller控制器View视图Model数据 1.简朴模板view调用 $this-display(); /模板名称与当前控制器、当前操作方法的名称一致$this-displ
3、ay(模板名称); /调用当前控制器相应目录指定名称的模板$this-display(控制器/模板名称); /调用其他控制器下的具体模板文献Tp框架有两种模式:开发(调式)、生产【默认】生产模式:错误提醒模糊开发模式:错误提醒和谐define(APP_DUBUG ,true); /开发define(APP_DUBUG ,false); /生产 2.已有模板与tp框架做结合具体实现环节:A.复制模板文献到View指定目录 B.复制css、img、js静态文献到系统指定目录C.把静态资源(css、img、js)文献的途径设立为“常量”信息(在index入口文献设立)D.在模板文献中通过常量引入静态
4、资源(css、img、js)文献,途径相对入口文献设立 最佳设立绝对地址(相对工作站点虚拟主机目录的绝对地址)为了后期模板维护方便,通过常量设立静态资源文献访问目录地址 E.css文献自身的图片设立,其途径相对css文献自身设立后续a、d反复实现即可 2.1静态资源文献引入 2.2静态资源文献存放通过独立路由可以访问不要暴露太多目录信息在模板index.html里边引入css文献,相对地址为什么相对index.php入口文献设立? Index.php+Controller控制器+模板文献=混编文献 引入css文献 2.3 css文献引入图片途径设立绝对、相对地址:一个文献引入另一个文献,另一个
5、文献的相对地址就相对引入文献设立。Index.php-style.cssStyle.css-引入-img图片,图片地址相对style.css文献设立因素:style.css是向服务器发送一个独立的http请求的,因此style.css和img图片是一个单位的信息,与具体index.php文献没有任何关系。模板文献中引入css样式文献引用途径问题:【相对】、【绝对】相对途径:相对入口文献index.php设立绝对途径:从虚拟主机站点目录开始设立的Css样式文献引入图片,途径的设立绝对、【相对】相对地址:相对css文献自身设立模板文献 引入css样式文献(css的相对途径可以相对index.php
6、入口文献设立)Index.php+Controller控制器+模板文献=混编文献 引入css文献css样式文献 引入css样式文献 引入img图片Index.html-css样式-img图片(图片的相对途径是css文献自身)Css样式文献被浏览器发送一个独立请求,因此内部img只于css文献有关系,与其他文献没有关系文献被谁引入的,其相对地址就相对引入文献设立 2.4在入口文献处设立常量引入静态资源文献六、后台页面搭建 1.分组设立 分组:同一个项目里边,由于业务规则的划分,有多个相关的功能模块,它们都有独立的控制器、view视图、配置文献、函数库文献等文献,为了开发维护方便,就给它们创建独立
7、的分组出来,每个分组都有自己的控制器、view视图、配置文献、函数库文献。假如尚有其他的业务规则模块,也都是独立的,可以继续创建分组。对分组进行访问:http:/网址/index.php/分组/控制器/操作方法每个分组下的文献文献目录可以参考Home进行设立,他们都是平等的。 2.搭建Admin后台登录页面 3.后台首页面搭建Tp框架提供了常量http:/网址/index.php/分组/控制器/操作方法/名称/值/名称/值_MODULE_:路由地址分组信息(http:/网址/index.php/分组)_CONTROLLER_:路由地址控制器信息 (http:/网址/index.php/分组/控
8、制器)_ACTION_:路由地址操作方法信息(http:/网址/index.php/分组/控制器/操作方法)_SELF_:路由地址的所有信息 (http:/网址/index.php/分组/控制器/操作方法/名称/值/名称/值)MODULE_NAME:分组名称CONTROLLER_NAME:控制器名称ACTIOIN_NAME: 操作方法名称 4. Frame的src属性值每个frame的src属性值需要通过独立路由地址访问,给每个src根据_CONTROLLER_常量设立绝对途径。 5.后台商品相关页面搭建七、细节解决 1.配置文献介绍 ThinkPHP/Conf/convention.php
9、系统重要配置文献 shop/Common/Conf/config.php 当前shop项目的配置文献 shop/Home/Conf/config.php 当前shop项目Home分组的配置文献 以上三个配置文献,假如存在同名的配置变量,后者会覆盖前者。系统里边并不是所有的配置变量都有有convention.php里边定义A. 大部份在convention.php有定义B. 在Behavior行为文献里边有定义一部分(例如:SHOW_PAGE_TRACE)C. 在框架的代码角落里边有零星的一点配置变量(例如:,MOUDLE_ALLOW_LIST) 2.默认分组设立 3.框架的两种模式 开发和生产
10、模式入口文献index.php: define(APP_DEBUG,true); /开发调式模式 define(APP_DEBUG,false); / 线上生产模式【默认】 开发模式(调式模式):每次请求会加载每个应用程序文献,比较花费资源,错误提醒比较和谐。会自动清除commonruntime.php文献,会依次加载每个需要文献 生产模式(线上模式): 该模式比较节省资源,会把请求过程中的一些通用程序文献给“编译”到一个文献里边(shop/Runtime/commonruntime.php),这样系统的每次请求加载的文献数目就比较少(节省了许多文献打开、关闭的开销)错误信息模糊,不方便调式
11、4.启动Smarty模板引擎 5.smarty模板标记有冲突 与css或js有冲突解决:在与内容中间设立空格使得左右标记换行设立literal/literal变换smarty的标记符号 6.页面底部设立跟踪信息八、框架的执行流程(了解) Index.php-.ThinkPHP/ThinkPHP.php-Think/Think.class.php-Think/App.class.php九、 总结1. 创建应用2. 四种路由形式http:/网址/index.php?m=分组&c=控制器&a=操作方法http:/网址/index.php/分组/控制器/操作方法 默认http:/网址/分组/控制器/操
12、作方法http:/网址/index.php?s=分组/控制器/操作方法3. 控制器调用视图模板$this-display();$this-display(模板名称);$this-display(控制器/模板名称);4. 已有模板与框架结合复制模板文献到view目录复制css/js/img 静态资源文献 到Public目录下给静态资源文献访问的途径 设立常量在模板文献中通过常量访问 静态意资源文献css文献自身有图片,图片设立为该css文献自身的相对途径访问5. 创建Admin分组6. 使用系统常量_CONTROLLER_MODULE_ACTION_SELF_ MODULE_NAMECONTRO
13、LLER_NAMEACTION_NAME7. 配置文献ThinkPHP/Conf/convention.phpShop/Common/conf/config.phpShop/Home/Conf/config.php8. 两种模式开发调式模式 define(APP_DEBUG,true);线上生产模式 define(APP_DEBUG,false;9. 启动Smarty模板引擎设立配置变量TMPL_ENGINE_TYPE=Smarty十、 数据库操作Model模型 1.连接配置数据库 2.创建model模型类原则上每个数据表 都相应一个model模型类 在php.ini 中修改 3.两种方式实例
14、化model对象 3.1实例化普通Model对象 $model=new ModelXXXModel();除了可以实现简朴操作(调用父类Model方法实现)也可以实现一些复杂操作(调用品体普通model方法实现) 3.2 实例化基类Model对象可以实现对数据库的基本操作$model = D();$model = D(Goods);(该方式允许我们即使不创建具体的model模型类文献,也可以对数据表的数据进行操作)假如一个数据表没特殊方法规定,就可以通过D(XXX)进行操作。假如数据表有特殊方法规定(例如用户名和密码判断需要一个特殊方法),就需要在普通model模型类里边定义好,通过 new M
15、odelXXXModel() 形式实例化对象,进而操作特殊方法。十一、 数据基本操作 1.数据查询操作调用方法:model 对象-select()具体使用:$model-select(); /查询并返回数据表的所有记录信息$model-select(主键id值);/查询主键信息等于条件id值的记录$model-select(id1,id2,id3.);/查询主键信息在条件范围内的记录(使用select()方法会始终返回一个二维数组信息) 1)具体数据操作方法使用 where()条件$model-where() /条件值就是sql语句where后边的结果值 limist()限制条数$model-
16、limit(数字) /严格查询数字条数的记录 field()限制查询字段$model-field(字段1,字段2,字段3) order()排序$model-order(排序条件 asc/desc) group()分组查询group by$model-group(分组条件) having()条件设立方法Having设立查询条件的效果与 where 使用效果类似区别:Where:语句条件字段,必须是“数据表中存在的”字段Having: 语句条件字段,必须是 查询结果集中存在的字段 Where()/limit()/field()三个方法直接存在于父类Model里边 Having()/order()/
17、group()三个方法存在于Model的魔术方法_call()里边 2).连贯操作以上具体方法在使用的时候可以一并使用多个,形成连贯操作,并且没有顺序规定例如:$obj-limit()-order()-field()-having()-group()每个方法执行完毕都把参数信息传递给成员options,该options形成一个数组 系统最后就是遍历options数组把一个复杂的sql语句给拼装起来的。 3).数据查询操作 Select(空/数字/数字的字符串) 返回一个二维数组结果 4).辅助方法 where() limit() field() order() having() group()
18、2数据添加操作调用方法:model对象-add() 具体两种方式使用 数组方式$数组=array()元素(下标=元素值),元素(下标=元素值),.下标:必须是数据表字段名称(否则不给添加到数据记录里边)$model(普通对象)-add(数组);数组的元素键名与数据表字段的名称必须一致 AR(Active Record 活跃记录)方式$model-属性(字段)=值; /属性字段 与 数据表字段一致,否则不给写入数据$model-属性(字段)=值;$model-add();AR规范规定一个model模型类与一个具体的数据表相应model 模型类实例化的对象 与 数据表的一条记录相应 model 对
19、象的属性 与 记录的字段相应TP框架的AR是仿真产品,由于在每个业务Model 模型类里边并不存在相应数据表的字段信息。Add()方法返回新记录的主键id值3数据修改操作调用方法: model对象-save()与add添加一致具体两种方式使用: 数组方式$model-save(数组); AR方式$model-属性(字段)=值;$model-属性(字段)=值;$model-save();数组的元素下标(属性字段)必须与数据表字段保持一致Save()方法返回受影响的记录条数注意:数据修改必须设立条件,主键id或where()方法 ,二选一即可,否则执行失败。4在后台实现商品添加逻辑 1)制作添加空
20、表单 2)收集表单信息实现数据写入数据库5. 在后台实现数据修改操作 5.1 get参数的传递和接受Pathinfo路由解析方式传递get参数信息格式:http:/网址/index.php/分组/控制器/操作方法/名称/值/名称/值控制器操作方法接受get参数:并不是直接使用$_GET接受信息,而是通过方法的形式参数接受 function方法名称($名称,$名称) 传递的get变量名称与方法形参变量的名称必须一致(形参参数在没有默认值的情况下,每次请求必须传递)例如:http:/网址/index.php/Admin/Goods/upd/goods_id/171/goods_name/htc_t
21、wo上述url是给upd操作传递两个参数:goods_id 和 goods_nameFunction upd($goods_id,$goods_name) 6. 数据删除操作7. 执行原生sql语句增 $sql=”insert into 表名 (字段1,字段2) values (值1,值2)”;删 $sql=”delete from 表名 where 条件”;改 $sql=”update 表名 set 字段1=值1,字段2=值2 where 条件”;查 $sql=”select * from 表名”;查询语句: $model 对象-query($sql); 返回一个二维数组结果添加/修改/删除
22、语句:$model 对象-execute($sql); 返回受影响记录条数十二、 实现表单自动验证1.实现前台用户注册的功能2.实现表单自动验证Create()方法收集表单信息同时的,也可以进行表单自动验证等功能。(二) 总结1. 运用model模型实现数据的增、删、改、查操作a) 添加数据 Add()方法,其返回新记录的主键id值两种方式:数组、AR方式b) 删除数据Delete(),返回删除的记录数目Delete(主键id) delete(“id1,id2,id3”)C)修改数据Save(),返回修改的记录数目两种方式:数组、AR方式条件规定:主键id、where()d)查询数据Selec
23、t(),返回二维数组信息Select(id) select(“id1,id2,id3”)Find(主键id),通过一维数组形式返回一条记录结果2. 辅助方法 Field() where() limit() group() oreder() having()3. 后台商品的添加、修改操作 商品添加:添加数据表单、收集表单信息 creaet() 商品修改:修改按钮、展现修改表单、收集表单信息 get参数的传递使用 http:/网址/index.php/分组/控制器/操作方法/名称1/值1/名称2/值2 Function 操作方法($名称1,$名称2)4. 注册表单自动验证通过create()方法收
24、集表单信息,该方法同时具有表单自动验证功能,其还具有非法字段过滤功能。验证规则(UserModel.class.php)Protecter $_validate=array( array(字段,规则,错误提醒条件,附加规则,时间)十三、 命名空间 namespace 命名空间 1.什么是命名空间在php程序语言里边,语法规则规定同名称的函数、类名、常量在一个请求里边不允许出现多次。假如有的应用程序不得已必须出现多个同名的函数、类名、常量,那么我们就可以把它们放到不同的空间里边做请求。这个不同的空间就称作“命名空间”。没有命名空间(有冲突)有命名空间(正常执行)namespace:calass3
25、01 function getInfo() function getinfo() function getInfo()namespace:calss302 function getInfo()上图在同一个请求里边定义两个同名的函数getinfo(),右图由于有使用命名空间,使得程序可以正常执行。 2.使用命名空间通过namespace关键字声明命名空间。 Namespace 空间名称; 命名空间针对 函数、类名、const常量 三部分起作用,并统称为“元素”。常量的声明:define(名称,值); /(在类外部声明常量)与命名空间没有关系const 名称=值 /与命名空间有关系const可以在类的内部声明常量信息(类常量)const可以在类外部声明常量(正经常量)使用命名空间的时候const可以放到类外部声明常量。const和define的区别:前者针对命名空间发生影响,后者不发生影响。const可以声明多个同名称的常量define对同名称常量只能声明一个 3.子级(多级)空间 命名空间可以让我们存放许多元素(函数、类、常量),有的时候元素比较多,为了管理方便,可以对元素进行分门别类地存储。也就是说命名空间可以设立为多级空间。多级空间的最后一级空间就称为”子级空间”3.1空间元素访问的三种形式1) 非限定名称2)3)
限制150内