目标:基于自定义的mvc框架开发的案例(项目)
典型的业务逻辑: 电子商务:商城(京东),B2C,C2C(淘宝),团购,秒杀,代购
内容管理:新浪门户类,优酷视频管理,博客文章管理,微博
论坛:
我们的需求,商品管理案例!参考ecshop应该出现的商品管理的基本功能实现。
ecshop,使用率非常高,电子商务平台(网上商城系统)。
上传拷贝php源代码 创建数据 基本配置
下载ecshop的源代码,解压,将upload目录拷贝(上传)到web目录:建议改成ecshop的名字
使用浏览器,访问到ecshop目录中的index.php即可。自动跳转到安装界面(如果需要重新安装,也可以请求到该地址)
检查环境,典型的需要:mysql扩展,gd扩展(图片处理扩展)
配置信息
数据库服务器部分:
管理员信息:
安装测试数据:
等待安装完毕:
Tips:建议选择PHP5.3X版本
数据结构的设计
编码的设计
典型的编码,分成两大方向:二次开发,基于框架开发
二次开发:在已有的产品(业务逻辑都已经实现)上做修改,升级的开发方式。
优点:速度快,通用业务逻辑已经被实现。
缺点:定制型差。
典型的产品:
电子商务:ecshop,ecmall,shopex,zen-cart,oscommerce ,麦进斗
内容管理:dedecms,帝国cms,phpcms,drupal,wordpress
论坛:phpwind,discuz
框架开发:
框架,没有实现业务逻辑,只实现了底层代码。
优点:不用写重复的底层功能代码,直接用即可,定制性强。
缺点:周期较长。
典型的框架:ThinkPHP,Yii,Ci,Zend-framework,symphony
PHP代码与HTML代码 出现在同一文件中。
典型的是:
上面是PHP先实现所有的业务逻辑,下边再是HTML决定显示样式。
或者直接利用PHP echo ,输出需要的HTML代码。
2 |
' ' '' ' '} ' |
将负责数据处理,业务逻辑处理的PHP代码,与负责显示效果处理的HTML(CSS,JS)等分开来进行管理。
典型的实现:将负责显示的HTML相关部分,拆分到独立的HTML中,在PHP处理完业务逻辑后,再将HTML代码加载到该文件中。
简单的说就是把原来混编的代码分开到2个页面。这2个页面要组合起来才能实现和原来一个混编文件一样的效果。
比如:match_list.html(展示)match_list.php(逻辑) require './match_list.html';
template:参见match_list.html
使用html相关代码负责显示结构,使用动态代码php实现数据的展示,该类型的文件,在项目中,称之为模板文件,template.
要求:浏览器用户请求,必须请求负责逻辑功能的PHP文件才可以。
如何限制浏览器用户不能请求到html模板文件?
典型的实现方式2种:
2 |
2 |
2 | Deny from All |
2 |
// |
2 |
} $rows = $db->fetchAll($sql); } |
2 |
" " |
2 |
/** * */ * * * @return array */ fetchAll($sql); } } |
2 |
// //$model_match = new MatchModel; $rows = $model_match->getList(); |
2 |
" " " |
2 |
$model_match = new MatchModel; $model_match->delById( |
2 |
* * * @param $match_id * * @return bool */ query($sql); } |
2 |
* */ } |
2 |
* */ } |
2 |
} } |
2 |
initDB(); } db = new MySQLDB( } } |
db即可操作到当前mysqlDB类对象。
2 |
* * * @param $match_id * * @return bool */ db->query($sql);db |
2 |
" " |
2 | // |
2 |
2 | '} '} |
在相应的部分执行正确的控制器代码即可:
2 |
'; $model_match = new MatchModel; $rows = $model_match->getList(); } '; $model_match = new MatchModel; $model_match->delById( } |
2 |
" // |
2 |
* */ * */ } * */ } } |
2 | //$action = $a.//$action(); |
2 |
} } |
2 |
$model_student = new StudentModel; getList(); } } |
2 |
db->fetchAll( } } |
2 |
|
2 |
2 | ////////$action_name(); |
测试:localhost/six/index.php?c=Student&a=list localhost/six/index.php?c=Match&a=list
2 |
" header( |
强调:
有了单一入口,就要求,用户的所有的请求都要从单一入口文件请求到。
目录分成2个目录
体现框架代码和业务逻辑代码的区别
将基础模型,mysqlDB类定义文件放在框架代码:
将业务逻辑相应的控制器,模型,视图文件分别放在application目录中
入口文件,通常放置在站点根目录:
修改项目中使用的路径
2 |
/index.php 入口文件 /application 应用程序目录 /model 模型类目录 /view 视图类目录 /controller 控制器类目录 /framework 框架代码目录 /Model. /MySQLDB.class.php mysql数据库的操作类 |