php mcv 实现
PHP 实现 MVC 架构的基本方法
MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和数据层。以下是 PHP 实现 MVC 的基本框架和代码示例:
目录结构
典型的 MVC 目录结构如下:
app/
├── controllers/
├── models/
├── views/
public/
├── index.php
入口文件 (public/index.php)
<?php
require '../app/bootstrap.php';
$router = new Router();
$router->dispatch();
路由类 (核心组件)
class Router {
public function dispatch() {
$url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$url = trim($url, '/');
$parts = explode('/', $url);
$controllerName = ucfirst($parts[0] ?? 'home') . 'Controller';
$action = $parts[1] ?? 'index';
require_once "../app/controllers/$controllerName.php";
if (class_exists($controllerName)) {
$controller = new $controllerName();
if (method_exists($controller, $action)) {
$controller->$action();
} else {
http_response_code(404);
echo "Action not found";
}
} else {
http_response_code(404);
echo "Controller not found";
}
}
}
控制器示例
class HomeController {
public function index() {
$model = new HomeModel();
$data = $model->getData();
require '../app/views/home/index.php';
}
}
模型示例
class HomeModel {
public function getData() {
return [
'title' => 'Welcome to MVC',
'content' => 'This is a simple PHP MVC implementation'
];
}
}
视图示例 (views/home/index.php)
<!DOCTYPE html>
<html>
<head>
<title><?= $data['title'] ?></title>
</head>
<body>
<h1><?= $data['title'] ?></h1>
<p><?= $data['content'] ?></p>
</body>
</html>
数据库连接封装
class Database {
private $connection;
public function __construct() {
$this->connection = new PDO(
'mysql:host=localhost;dbname=test',
'username',
'password'
);
}
public function query($sql, $params = []) {
$stmt = $this->connection->prepare($sql);
$stmt->execute($params);
return $stmt;
}
}
进阶实现建议
使用 Composer 管理依赖 创建 composer.json 文件并添加自动加载配置:
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
实现基类控制器
abstract class BaseController {
protected function render($view, $data = []) {
extract($data);
require "../app/views/$view.php";
}
protected function redirect($url) {
header("Location: $url");
exit;
}
}
添加中间件支持
trait Middleware {
protected $middlewares = [];
public function middleware($name) {
$this->middlewares[] = $name;
return $this;
}
protected function runMiddlewares() {
foreach ($this->middlewares as $middleware) {
$middlewareClass = new $middleware();
$middlewareClass->handle();
}
}
}
安全注意事项
验证所有用户输入
$cleanInput = filter_input(INPUT_GET, 'param', FILTER_SANITIZE_STRING);
使用预处理语句防止 SQL 注入
$stmt = $db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
实现 CSRF 保护
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF validation failed');
}
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));






