Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
<?php
namespace phpcn;
// 框架的入口文件
//1.加载配置项
require __DIR__ . '/config.php';
//2.加载框架核心类库
require __DIR__ . '/core/Controller.php';
require __DIR__ . '/core/Model.php';
require __DIR__ . '/core/View.php';
//3.加载自定义模型
require __DIR__ . '/model/StaffModel.php';
//4.实例化模型类
//extract() :解构,将一个关联数组结构为一个个独立变量
extract(DATABASE);
//查看解构变量是否成功
// echo $type;
$dsn = sprintf('%s:dbname=%s',$type,$dbname);
$model = new StaffMdel($dsn,$username,$password);
//https://php.edu/0506/mvc3/index.php?c=controller&a=action
//c = 控制器 a = action
$c = $_GET['c'] ?? APP['default_controller'];
$a = $_GET['a'] ?? APP['default_action'];
//获取类名
$class = ucfirst($c) . 'Controller';
//加载自定义类
require __DIR__ . '/controller/'. $class . '.php';
//5.加载视图类
$view = new View();
//6.实例化控制器类
$fullclass = __NAMESPACE__ . '\\' . $class;
$controller = new $fullclass($model, $view);
//执行控制器中index()方法
echo $controller->$a();
<?php
//连接数据库参数
define('DATABASE',[
'type'=>'mysql',
'host'=>'localhost',
'dbname'=>'phpedu',
'port'=>'3306',
'charset'=>'utf8',
'username'=>'root',
'password'=>'phpedu'
]);
//应用相关
define('APP',[
//默认控制器
'default_controller'=>'index',
//默认方法
'default_action'=>'index'
]);
//根路径
define('ROOT_PATH',__DIR__);
<?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(10);
// 2. 视图: 渲染模板
$this->view->display($data);
}
}
<?php
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();
}
}
// 测试语句
// print_r((new Model('mysql:dbname=phpedu', 'root', 'root'))->getAll());
<?php
namespace phpcn;
class View
{
public function display($data)
{
// 1. 模型赋值
$staffs = $data;
// 2. 渲染模型
include ROOT_PATH . '/view/show.php';
}
}
<?php
namespace phpcn;
class StaffMdel extends Model
{
//复用核心
}
例如:http://php.edu/0506/mvc3/index.php?c=admin&a=index
<?php
namespace phpcn;
class AdminController extends Controller
{
public function index()
{
return '这里是后台';
}
}