PHP----MVC-v1.0, 前序
来源:互联网 发布:新手怎么选择基金 知乎 编辑:程序博客网 时间:2024/06/05 04:33
MVC: 模式化
controller 是一个php文件,由浏览器直接请求 根据请求1:决定需要什么数据,并去调用模型文件(类),去获取该数据 根据请求2:决定需要将数据显示在哪个视图文件中(include('header.html')) $obj = new dbModel(); $data = $obj->getAllUser(); <a href="userController.class.php?act=show"></a> //通过参数控制页面:要显示的内容 userController.class.php 继承 Controller.class.php require_once './UserModel.class.php'; require_once './ModelFactory.class.php'; require_once './Controller.class.php'; class UserController extends Controller{ function showAction(){ //调用userModel $obj = ModelFactory::M("UserModel"); $result = $obj->InsertUser($_POST['username'], $_POST['password']); include './show.html'; } function detailAction(){} function deleteAction(){ $this->gotoUrl("删除功能!", "?", 3); } } $ctrl = new userController(); $act = !empty($_GET['act']) ? $_GET['act'] : 'Index'; $active = $act . "Action"; $active(); //调用可变函数
Model
Model: 是一个php文件,不能直接请求,只能"被载入"而发挥作用 根据控制器的要求去生产数据s 方法可能需要一些参数来获取数据,连接数据库。UserModel.class.php getAllUser(); //获取所有用户 getUserById($id); //根据id获取该用户 ...设计:一个数据库对应一个model(UserModel.clss.php) 继承于 Model.class.php(连接数据库,常用有方法。 此类只对model调用)Model.class.php 内容如下:require_once "./db.class.php";class BaseModel{ protected $_dao = null; //用于存储数据库工具类的实例(对象) function __construct(){ $config = array( 'host'=>'localhost', 'port'=>3306, 'user'=>"root", 'poss'=>"123456", 'charset'=>'utf8', 'dbname'=>'test' ); $this->_dao = DB::getInstance($config); }}
View
View: 是一个'伪Html文件',因为其中有极简单的php代码,不应由浏览器直接请求 结合html, css 代码,显示相应的(变量)数据 echo data;
实图典型做法:
数据分为 普通数据:echo #v; 数据数据:foreach($data as $k=>$v){...} echo $data['id']; 对象数据:echo $obj->p1;控制器典型做法:1. 设定编码: 因为是控制器决定显示什么数据,也就应该由其来决定使用什么编码,一般使用一种相对固定的编码,统一设置2. 页面的简短信息显示,及跳转功能Controller{ function __construct(){ header("content-type:text/html; charset=utf-8"); } //显示一定的提示文字,然后,自动跳转 function gotoUrl($msg, $url, $time=3){ echo $msg; echo "<a href='$url'>返回</a>"; echo "<br /> 页面将在{$time}秒之后自动 跳转"; header("refresh: $time; url = $url"); //自动定时跳转功能 }}//单例工厂类:class ModelFactory{ //用于存储各个模型类的唯一实例(单例) static $all_model = array(); static function M($model_name){ //判断此模型是否存在,是否是实例 if(!isset(static::$all_model[$model_name]) || !(static::$all_model[$model_name] instanceof $model_name)){ static::$all_model[$model_name] = new $model_name(); } return static::$all_model[$model_name]; }}//testclass A{}var_dump(ModelFactory::M(A));echo '<br>';var_dump(ModelFactory::M(A));
MVC 写法进级
1. 原始写法(很多的else if) addAction(){ $obj = ModelFactory::M("UserModel"); $result = $obj->InsertUser($_POST['username'], $_POST['password']); echo 'add success~'; } if(!empty($_GET['act']) && $_GET['act'] == Add){ addAction(); }else if(){}2. 改进:函数封装(调用上面的方法)--可以将act 简写为:a $act = !empty($_GET['act']) ? $_GET['act'] : 'Index'; $active = $act . "Action"; $active(); //调用可变函数3. 终级改进:类封装(将上面的函数封装成一个类) $ctrl = new userController(); $act = !empty($_GET['act']) ? $_GET['act'] : 'Index'; $ctrl->$active = $act . "Action"; $ctrl->$active(); //调用可变函数
基础入口文件的设定
$p = !empty($_GET['p']) ? $_GET['p'] : 'front'; //选择平台。默认为前台在index.phpdefine("PLAT", $p); //平台define("DS", DIRECTORY_SEPARATOR); //目录分隔符自动匹配:win:\, unix:/define("ROOT", __DIR__ . DS);define("APP", ROOT . 'application' . DS); //application 的完整路径define("FRAMEWORK", ROOT . 'framework' . DS);define("PLAT_PATH", APP . PLAT . DS);define("CTRL_PATH", PLAT_PATH . "Controller" . DS); //当前控制器所在目录define("MODEL_PATH", PLAT_PATH . "Model" . DS); define("VIEW_PATH", PLAT_PATH . "View" . DS);-示例:只留文件名include './Application/back/view/login.html';include VIEW_PATH . 'login.html';-自动加载--只能对类文件自动加载require_once FRAMEWORK . "Db.class.php";require_once MODEL_PATH . $c . "Model.class.php";require_once FRAMEWORK . "ModelFactory.class.php";require_once CTRL_PATH . $c ."Controller.class.php";自动加载代替上面几行:按需加载function __autoload($clsss){ $base_class = array("Db", "Model", "ModelFactory", "Controller"); if(in_array( $class, $base_class )){ require FRAMEWORK . $class . '.class.php'; //基础模型类 }else if(substr($clsss, -5) == "Model"){ require MODEL_PATH . $class . ".class.php"; }else if(substr($clsss, -10) == "Controller"){ require CTRL_PATH . $class . ".class.php"; }}$controller_name = $c."Controller"; //会自动调用__autoload()$ctrl = new controller_name();$a = !empty($_GET['a']) ? $_GET['a'] : 'Index';$active = $a . "Action";$ctrl->$active(); //页面工作开始, 指定页面内容
0 0
- PHP----MVC-v1.0, 前序
- PHP----MVC-v1.0
- PHP扩展开发-v1.0
- php oauth v1.0 配置
- 【PHP】选择题题库系统V1.0
- php图片上传类 v1.0
- 轻量级php框架phpk v1.0发布
- 用PHP实现简单登录v1.0
- PHP面向对象v1:
- MVC 前前奏
- php 自制基于simple_html_dom的爬虫一只v1.0
- PHP学习笔记之命名空间//待完善V1.0
- PHP抓取百度贴吧邮箱v1.0
- PHP学习笔记之数组操作//待完善V1.0
- 【函数库】PHP RXData(RPGXP数据文件) 解析库 V1.0
- shawl.qiu Javascript 前景色背景色调色类 / BgColorScheme v1.0
- php.mvc
- php MVC
- Java中HashMap和TreeMap的区别深入理解
- ld: symbol(s) not found for architecture XXX
- 小米智能家庭接入亚马逊Echo
- 20170303 每日一个工具类:Drawable转Bitmap
- bzoj1037: [ZJOI2008]生日聚会Party
- PHP----MVC-v1.0, 前序
- HDU 1091 JAVA
- #ifdef _DEBUG用法小结
- Android开发细枝末节
- mysql 函数调用
- 打patch
- radio[checked="checked"] jquery设定选中,画面未选中
- 【Android】利用 ACRA 实现在规定时间内崩溃次数超过规定值就自动清理 APP 数据
- 敏捷开发-为什么要使用持续集成