Correction status:qualified
Teacher's comments:mvc, 其实也没有想像中的难, 你也可以写一个
1. 写一个依赖注入的案例, 内容自定义
DEMO2
<?php /** * MVC 思想 * 任务:将商品信息展示出来 * */ //1. 依赖注入的案例 // 加载:模型类 require 'Model.php'; // 加载:视图 require 'View.php'; // 控制器 class Controller { public function index(Model $model, View $view) { // 1. 获取数据 $data = $model->getData(); // 2. 渲染模版/视图 return $view->fetch($data); } } // 客户端调用控制器 // 3.将模型与视图的实例化过程 放在控制器的外部实现 $model = new Model(); $view = new View(); $controller = new Controller(); // 将Model 和View的类实现,作为参数,注入到控制器的方法中 这就是依赖注入方法 // 注入点是:index 普通方法 // 1.控制器中的普通方法 // 2.控制器中的构造方法 (优点:简化代码 ,多对象使用) echo $controller->index($model, $view); ?>
点击 "运行实例" 按钮查看在线实例
Model 模型类:操作数据库
<?php // 模型类:操作数据库 class Model { public function getData() { return [ ['id'=>1, 'name'=>'苹果电脑', 'model'=>'MacBook Pro', 'price'=>25800], ['id'=>2, 'name'=>'华为手机', 'model'=>'P30 Pro', 'price'=>4980], ['id'=>3, 'name'=>'小爱同学', 'model'=>'AI智能音响', 'price'=>299], ]; } } ?>
点击 "运行实例" 按钮查看在线实例
view 视图类:渲染数据
<?php // 视图类:渲染数据 class View { public function fetch($data) { $table = '<table border="1" cellspacing="0" width="400">'; $table .= '<caption>商品信息表</caption>'; $table .= '<tr bgcolor="#add8e6"><th>ID</th><th>品名</th><th>型号</th><th>价格</th></tr>'; foreach ($data as $product){ $table .= '<tr>'; $table .= '<td>' . $product['id'] . '</td>'; $table .= '<td>' . $product['name'] . '</td>'; $table .= '<td>' . $product['model'] . '</td>'; $table .= '<td>' . $product['price'] . '</td>'; $table .= '</tr>'; } $table .= '</table>'; return $table; } } ?>
点击 "运行实例" 按钮查看在线实例
2. 写一个mvc应用的案例, 内容自定义
<?php /** * MVC 思想 * 任务:将商品信息展示出来 * */ // 加载:模型类 require 'Model.php'; // 加载:视图 require 'View.php'; // 控制器 class Controller { public function index() { // 1. 获取数据 $model = new Model(); $data = $model->getData(); // 2. 渲染模版/视图 $view = new View(); return $view->fetch($data); } } // 客户端调用控制器 $controller = new Controller(); echo $controller->index(); ?>
点击 "运行实例" 按钮查看在线实例
3. 写一个简单的路由, 理解路由的原理与目标
<?php // 路由的原理 // 字符串解析为数组使用explode() 第一个为/ 分隔符,第二个处理的数组 // 1.从url路径中解析出独立的单元 $url = $_SERVER['REQUEST_URI']; echo $url; $req = explode('/' , $url); echo '<pre>'. print_r($req,true); //admin: 后台模块 //User: 控制器 //add:控制器中的方法 $route = array_slice($req, 4, 3); echo '<pre>'. print_r($route,true); list($module, $controller, $action) = $route; echo '模块:'.$module.'<br>控制器:'.$controller.'<br>操作:' .$action; //http://php.io/1011/mvc/route.php/admin/user/add/name/maomao/age/36/salary/3300 // /name/maomao/age/36/salary/3300 // array_slice()从数组中取出一些数据 $values = array_slice($req,7,6); echo '<pre>'. print_r($route,true); for ($i=0; $i<count($values); $i+=2){ $params[$values[$i]] = $values[$i+1]; } echo '<pre>'. print_r($params,true); // 控制器 class User { public function add($name, $age, $salary) { return __METHOD__. ': 姓名: '.$name.', 年龄:'.$age.'岁'. ', 工资:'. $salary .'元'; } } // 路由的目标,确定将URL中的操作映射到控制器中的方法上 echo call_user_func_array([(new User()), 'add'], $params); ?>
点击 "运行实例" 按钮查看在线实例