php框架javascript
真实项目开发步骤:php
问题:html
1. 多人开发项目,分工不合理,(html php mysql)java
2. 代码风格不同,后期维护十分困难mysql
3. 项目生命周期十分短,项目生命没有延续性,形成资源浪费、人员浪费jquery
4. 项目不能很好适应客户需求,牵一发而动全身。sql
其余相关框架thinkphp
1. zendframework zend php语言公司发布的官方框架,重量级(功能多)数据库
2. yii 美国华人开发的框架,xue qiang, qiang, 重量级框架,纯OOP框架设计模式
3. CI CodeIgniter 轻量级框架,开发速度快,部署灵活
什么框架:
一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。
框架能够节省咱们50-60%的工做量,咱们所有精力都集中在业务层次。
为何使用框架
l 框架能够帮组咱们快速、稳定、高效搭建程序系统
l 该系统因为框架的使用使得自己的维护性、灵活性、适应客户需求方面获得最大化的加强。
l 使用框架的过程当中可使得咱们的注意力所有集中业务层面,而无需关心程序的底层架构。
thinkphp.cn
thinkphp 3.2版本
部署一个Shop项目,使用tp框架
步骤:
建立入口文件:
M:Model 数据模型层,负责数据操做
V:View 视图层,负责显示视图
C:Controller 控制器,实现业务逻辑
经过url地址get参数找到指定的控制器,并进行对应方法调用请求
http://网址/index.php?m=模块名称&c=控制器&a=方法
以上url地址信息代码不够优雅、不安全。
tp框架url地址能够由如下四种
具体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地址,它会根据当前模式进行url地址建立使用
快捷函数 U(); 建立url地址
经过url地址模式咱们学习到了如下内容:
开发调试模式:系统须要加载大概24个文件 index.php define(“APP_DEBUG”,true);
生产模式:系统只须要加载不多的大概7个文件 在入口文件
index.php中定义: define(“APP_DEBUG”,false);
节省了许多文件的开发、关闭的系统开销,节省资源
要在页面显示trace信息,须要在本身的配置文件中:
控制器是MVC模式中的核心,tp默认有一个Index控制器:
Index控制器里面有一个操做方法:Index
咱们在访问http://localhost:8080/Thinkphp/index.php入口文件的时候,会默认访问Index控制器下面的Index方法
若是要本身建立一个控制器Login:
注意:文件命名规则,按照驼峰法命名
这样咱们就完成了控制器和操做方法的创建,若是要访问咱们刚才的Login控制器下的Login方法:
这样再次访问,会发现报错:
缘由:模板文件没有建立,这时候咱们就要去建立模板文件
视图模板文件存放发位置在:
里面没有模板文件
若是咱们想要访问Login控制器中的Login方法,首先咱们要建立一个Login控制器对应的模板文件夹,该文件夹就对应着Login控制器:
而后在Login文件夹下再建立一个login.html的模板文件来对应Login控制器下的Login方法:
在login.html里面写入要显示的代码:
而后再次请求:
默认是不敏感的:
在config.php里边对url大小写敏感进行设置
空操做:就没有指定的操做方法
空控制器:没有指定控制器
http://网址/index.php/Home/User/login
http://网址/index.php/Home/User/hello 空操做
http://网址/index.php/Home/beijing/login 空控制器
通常网站处于安全考虑不给用户提示任何错误信息
“空操做”本质意思:一个对象(控制器)调用自己不存在的方法
在OOP里边,对象调用自己不存在方法,处于用户体验比较好的角度考虑,咱们能够在类里边制做一个魔术方法:function __call();
在tp里面控制器的父类:
父类中有个方法:
因此空操做有两种解决方案:
① 在对应的控制器里边制做一个方法,名称为”_empty”,这个控制器的空操做都会自动执行该方法。(推荐使用)
② 给空操做的名称制做一个同名的模板出来,系统会自动调用
空控制器:在实例化控制器对象的时候,没有找到指定的类
何时实例化控制器对象:ThinkPHP/Library/Think/App.class.php
熟记文件:
index.php 入口文件
ThinkPHP/ThinkPHP.php 框架核心文件
ThinkPHP/Library/Think/Think.class.php 框架核心文件
ThinkPHP/Library/Think/App.class.php 框架应用文件
在App.class.php内部包括控制器对象建立,以及对象调用指定的方法呈现内容:
空控制器处理方案:能够再制做一个控制器,名称EmptyController.class.php
在该控制器内部其实只须要制做一个_empty()方法便可。
这样再次请求:
系统有前台用户操做界面
系统还有后台供公司内部人员使用维护平台
二者在使用的过程当中就是对“控制器”、“视图模板”、“model模型”的操做
为了系统开发方便,及代码部署更加合理,咱们的控制器、view视图等先后台文件不要混在起,要在物理结构上给分开
http://网址/index.php/Home/控制器/操做方法 访问Home控制器及制定操做
http://网址/index.php/Admin/控制器/操做方法 访问Admin分组的控制器和操做方法
获取系统常量信息:
若是加参数true,会分组显示:
一个控制器在执行的时候,能够实例化另一个控制,并经过对象访问其指定方法。
跨控制器调用能够节省咱们代码的工做量
在Main控制器中有一个Info操做方法
想要在其它控制器,好比Login中调用,咱们能够实例化控制器对象,调用里面的方法便可:
造对象有快捷函数供咱们使用:
A(“[模块/]控制器标志”) 实例化控制器对象
R([模块/]控制器标志/操做方法) 实例化对象同时调用指定方法
convertion.php
config.php
a) model自己就是一个类文件
b) 数据库中的每一个数据表都对应一个model模型文件
c) 最简单的数据model模型类
tp框架执行过程当中会使用到数据表中的字段信息,经过sql语句能够查询”show colums from table” ,处于性能考虑,能够把字段缓存,避免每次重复执行sql语句。
实例化Model的三种方式:
a) $goods = D(“Goods”);
b) 该$goods是父类Model的对象,可是操做的数据表仍是sw_goods
c) $obj = D(); 实例化Model对象,没有具体操做数据表,与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/Common/functions.php
注意:若是没有对应的model模型文件类,也能够直接实例化model对象进行操做
D()和M()方法均可以实例化操做一个没有具体model模型类文件的数据表。
select()是数据模型的一个指定方法,能够得到数据表的数据信息
返回一个二维数组信息,当前数据表的所有数据信息
$obj = D(); 建立对象
$obj -> 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 >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() group() order() having()
在__call()魔术方法里边会判断当前的执行方法是不是一个method属性的元素信息,若是存在就会执行执行
以上多个方法是同时使用多个进行条件显示(而且没有顺序要求)
$obj -> 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. 给该方法传递参数
a) select(30) 查询主键值等于30的记录信息
b) select(“10,12,14”) 查询主键值在十、十二、14范围的记录信息
为了使用方便咱们会但愿返回一个一维数组,这时候可以使用find()方法
6. 相关聚合函数 count() sum() avg() max() min()
以上聚合函数是最后被调用的方法
以上方法能够结合具体条件方法使用
例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目
add() 该方法返回被添加的新记录的主键id值
两种方式实现数据添加
$goods = D(“Goods”);
$arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);
//注意:goods_name和goods_weight是数据表中字段名称
$goods -> add($arr);
a) ActiveRecord 活跃记录
b) AR规定了程序与数据库之间的关系
c) 什么是AR:
d) ① 一个数据表对应一个类model
e) ② 一条数据记录对应类的一个对象
f) ③ 每一个字段对应该对象的具体属性
g) tp框架的AR是假的
$goods = D(“Goods”);
$goods -> goods_name = “htc_one”;
$goods -> goods_price = 3000;
$goods -> add();
以上两种方式:数组、AR,最后add都要把新记录的主键id值返回
注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容
注意:若是是主键值重复,这种错误会致使error()方法不跳转页面直接抛出错误信息,这是新版本问题,若是想要跳转,找到
save() 实现数据修改,返回受影响的记录条数
具体有两种方式实现数据修改,与添加相似(数组、AR方式)
a) $goods = D(“Goods”);
b) $ar = array(‘goods_id’=>100,‘goods_name’=>’lenovo手机’,’goods_price’=>1200);
c) $goods ->where(‘goods_id>50’)-> save($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语句不被容许执行。
如何执行:
① 明确告诉系统那条sql语句被update更新
② 能够设置where进行sql语句更新操做
save() 方法返回值
0:以前没有问题,执行先后数据没有变化
天然数:受影响的记录条数
false:执行失败
数据修改具体实现:
经过路由给一个操做方法传递参数
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,$addr){
$name;
$age;
$addr;
}
以上参数表述,若是在请求的时候没有按照规则传递参数,那么当前方法禁止访问。
(除非参数有默认值)
修改商品信息步骤:
delete() 返回受影响的记录条数
$goods -> delete(30); 删除主键值等于30的记录信息
$goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录
$goods -> where(“goods_id>60”)->delete() 把符合条件的记录都给删除
$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 -> query($sql);
$sql = “update sw_goods set goods_name = ‘htc_two’ where goods_id=100”;
$goods -> execute($sql);
javascript
jquery
在服务器端经过tp框架实现表单验证
用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历
具体步骤:
ThinkPHP/Library/Think/Verify.class.php
$verify = new 命名空间Verify();
$verify -> entry(); 生成一个验证码
一个单独的方法生成验证码
在模板使用:
验证是否成功:
tp框架关于session操做(cookie)
//session(name,value, 有效时间) 设置session
//session(name) 获取session
//session(name,null) 删除指定session
//session(null) 清空所有session
当前模块(Home)目录下,模块中的类库命名空间的根都是以模块名命名
ThinkPHP/Library/目录下,根命名空间为ThinkPHP/Library
2.
在ThinkPHP/Library/Think/
下面有很+多类库供咱们使用
模板页面: