php mvc 实现
PHP MVC 实现方法
MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。
目录结构
创建以下目录结构以组织代码:
app/
controllers/
models/
views/
public/
index.php
入口文件
在public/index.php中处理所有请求并初始化框架:
<?php
require_once '../app/bootstrap.php';
$app = new Core();
核心类
创建Core类来处理路由和加载控制器:
class Core {
protected $currentController = 'Pages';
protected $currentMethod = 'index';
protected $params = [];
public function __construct() {
$url = $this->getUrl();
if (file_exists('../app/controllers/' . ucwords($url[0]) . '.php')) {
$this->currentController = ucwords($url[0]);
unset($url[0]);
}
require_once '../app/controllers/' . $this->currentController . '.php';
$this->currentController = new $this->currentController;
if (isset($url[1])) {
if (method_exists($this->currentController, $url[1])) {
$this->currentMethod = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
}
public function getUrl() {
if (isset($_GET['url'])) {
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
return explode('/', $url);
}
}
}
控制器示例
创建基础控制器Pages.php:
class Pages {
public function index() {
$data = [
'title' => 'Welcome'
];
$this->view('pages/index', $data);
}
public function view($view, $data = []) {
require_once '../app/views/' . $view . '.php';
}
}
模型实现
创建基础模型Model.php:
class Model {
protected $db;
public function __construct() {
$this->db = new Database();
}
}
数据库类
创建数据库处理类Database.php:
class Database {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $stmt;
private $error;
public function __construct() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
echo $this->error;
}
}
public function query($sql) {
$this->stmt = $this->dbh->prepare($sql);
}
public function execute() {
return $this->stmt->execute();
}
public function resultSet() {
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
}
视图实现
创建视图文件app/views/pages/index.php:
<!DOCTYPE html>
<html>
<head>
<title><?php echo $data['title']; ?></title>
</head>
<body>
<h1><?php echo $data['title']; ?></h1>
</body>
</html>
配置设置
在app/config/config.php中定义常量:
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'mvcapp');
自动加载
在app/bootstrap.php中设置自动加载:
spl_autoload_register(function($className) {
require_once '../app/' . str_replace('\\', '/', $className) . '.php';
});
require_once 'config/config.php';
URL重写
在public/.htaccess中添加规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
这个实现提供了基本的MVC结构,可以根据需要扩展更多功能如中间件、验证等。







