php实现mvc
PHP 实现 MVC 架构
MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。以下是 PHP 实现 MVC 架构的具体方法。
目录结构
一个典型的 MVC 目录结构如下:
app/
controllers/
models/
views/
public/
index.php
入口文件
public/index.php 是应用程序的入口文件,负责初始化路由和加载核心组件:
<?php
require_once '../app/bootstrap.php';
$router = new Router();
$router->dispatch();
路由类
Router 类负责解析 URL 并调用相应的控制器和方法:
class Router {
protected $controller = 'Home';
protected $method = 'index';
protected $params = [];
public function __construct() {
$url = $this->parseUrl();
if (file_exists('../app/controllers/' . ucfirst($url[0]) . 'Controller.php')) {
$this->controller = ucfirst($url[0]);
unset($url[0]);
}
require_once '../app/controllers/' . $this->controller . 'Controller.php';
$this->controller = new $this->controller;
if (isset($url[1])) {
if (method_exists($this->controller, $url[1])) {
$this->method = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
call_user_func_array([$this->controller, $this->method], $this->params);
}
public function parseUrl() {
if (isset($_GET['url'])) {
return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
}
}
控制器
控制器负责处理用户请求并协调模型和视图。例如 HomeController.php:
class HomeController {
public function index($name = '') {
$model = new HomeModel();
$user = $model->getUser($name);
$view = new View('home/index', ['user' => $user]);
}
}
模型
模型负责数据处理和业务逻辑。例如 HomeModel.php:
class HomeModel {
public function getUser($name) {
return ['name' => $name ?: 'Guest'];
}
}
视图
视图负责展示数据。View 类可以这样实现:
class View {
public function __construct($view, $data = []) {
require_once '../app/views/' . $view . '.php';
}
}
视图文件 views/home/index.php:
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome, <?php echo $user['name']; ?>!</h1>
</body>
</html>
数据库连接
可以在核心文件中添加数据库连接,例如 bootstrap.php:
require_once 'config/database.php';
class Database {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
public function connect() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$pdo = new PDO($dsn, $this->user, $this->pass);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
}
}
配置示例
config/database.php 可能包含:
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'password');
define('DB_NAME', 'mvc_app');
自动加载
使用 spl_autoload_register 自动加载类文件:
spl_autoload_register(function($className) {
$paths = [
'../app/controllers/',
'../app/models/',
'../app/core/'
];
foreach ($paths as $path) {
$file = $path . $className . '.php';
if (file_exists($file)) {
require_once $file;
}
}
});
错误处理
添加错误处理以提高调试效率:
error_reporting(E_ALL);
ini_set('display_errors', 1);
通过以上步骤,可以实现一个基本的 PHP MVC 架构。根据项目需求,可以进一步扩展功能,如添加中间件、依赖注入容器或 ORM 等高级特性。







