批改状态:合格
老师批语:

(1)创建配置文件config
// 数据库连接参数define('DATABASE',['type'=>'mysql','host'=>'localhost','dbname'=>'mydb','port'=>'3306','charset'=>'utf8','username'=>'myshop','password'=>'yzj123']);// 应用相关define('APP', [// 默认控制器'default_controller'=>'index',// 默认方法'default_action'=>'index']);// 项目根路径define('ROOT_PATH',__DIR__);
(2)创建核心类库
namespace phpcn;use PDO;class Model{// 连接对象protected $db;// 模型实例化时,应该将数据库连接上,为后面的操作做好准备public function __construct($dsn, $username, $password){$this->db = new PDO($dsn, $username, $password);}// 通常模型类中,会预置一些公共方法,供用户进行数据库操作// 获取分页数据(多条)public function getAll($n = 10){$stmt = $this->db->prepare('SELECT * FROM `staff` LIMIT ?');// 默认绑定的都是字符串类型$stmt->bindParam(1, $n, PDO::PARAM_INT);$stmt->execute();// print_r($stmt->debugDumpParams());return $stmt->fetchAll();}}
namespace phpcn;class View{public function display($data){// 1. 模型赋值$staffs = $data;// 2. 渲染模型include ROOT_PATH . '/view/' . 'show.php';}}
namespace phpcn;class Controller{// 模型对象protected $model;// 视图对象protected $view;// 控制器类实例时,要确保模型和视图对象可用public function __construct($model, $view){$this->model = $model;$this->view = $view;}public function index(){// 1. 模型: 获取数据$data = $this->model->getAll(5);// 2. 视图: 渲染模板$this->view->display($data);}}
(3)增加选择控制器功能
namespace phpcn;// 用户自定义模型class StaffModel extends Model{// 复用}
<table border="1" cellspacing="0" cellpadding="5" width="400"><caption style="font-size: 1.2em;">员工信息表</caption><thead bgcolor="lightcyan"><tr><th>id</th><th>姓名</th><th>性别</th><th>邮箱</th><th>操作</th></tr></thead><tbody align="center"><?php foreach ($staffs as [$id, $name, $sex, $email]) : ?><tr><td><?= $id ?></td><td><?= $name ?></td><td><?= $sex ? '女' : '男' ?></td><td><?= $email ?></td><td><a href="">编辑</a><a href="">删除</a></td></tr><?php endforeach ?></tbody></table>
namespace phpcn;// 默认控制器class IndexController extends Controller{// ...}
namespace phpcn;// 自定义控制器class UserController extends Controller{public function hello(){return '<h2>Hello world</h2>';}}
(4)url 参数解析
namespace phpcn;// 加载配置项require __DIR__ .'/config.php';// 加载框架的核心类型require __DIR__.'/core/Controller.php';require __DIR__.'/core/Model.php';require __DIR__.'/core/View.php';// 加载自定义模型require __DIR__.'/model/StaffModel.php';// 将关联数组结构成一个个独立变量extract(DATABASE);// 实例化模型类$dsn = sprintf('%s:dbname=%s',$type,$dbname);$model = new StaffModel($dsn,$username,$password);// http://phpedu.com/0506/0506/mvc3/index.php?c=controller&a=action// c=控制器,a=控制器的方法$c = $_GET['c'] ?? APP['default_controller'];$a = $_GET['a'] ?? APP['default_action'];// 获取类名$class = ucfirst($c).'Controller';// 加载自定义控制器require __DIR__.'/controller/'.$class.'.php';// 加载视图类$view = new View();// 完整控制器类名$fullclass = __NAMESPACE__.'\\'.$class;$controller = new $fullclass($model,$view);// 执行控制器中的index()echo $controller->$a();


Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号