一、MVC架构概述
MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心组件:
- 模型(Model):处理数据和业务逻辑
- 视图(View):负责数据展示和用户界面
- 控制器(Controller):接收用户输入,协调模型和视图
二、项目结构设计
首先创建以下目录结构:
/myapp
/app
/controllers
/models
/views
/core
/public
index.php
.htaccess
三、核心框架代码实现
1. 入口文件 (public/index.php)
<?php
// 定义应用根目录
define('ROOT', dirname(__DIR__));
// 引入自动加载文件
require_once ROOT . '/vendor/autoload.php';
// 引入框架核心文件
require_once ROOT . '/core/App.php';
// 启动应用
$app = new CoreApp();
$app->run();
?>
2. 应用核心类 (core/App.php)
<?php
namespace Core;
class App {
protected $controller = 'Home';
protected $method = 'index';
protected $params = [];
public function __construct() {
$url = $this->parseUrl();
// 控制器处理
if (isset($url[0]) && 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';
$controllerClass = "AppControllers\" . $this->controller . "Controller";
$this->controller = new $controllerClass;
// 方法处理
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);
}
protected function parseUrl() {
if (isset($_GET['url'])) {
return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
return [];
}
}
?>
3. 基础控制器类 (core/Controller.php)
<?php
namespace Core;
class Controller {
public function model($model) {
require_once '../app/models/' . $model . '.php';
$modelClass = "AppModels\" . $model;
return new $modelClass;
}
public function view($view, $data = []) {
require_once '../app/views/' . $view . '.php';
}
}
?>
四、创建示例控制器
首页控制器 (app/controllers/HomeController.php)
<?php
namespace AppControllers;
use CoreController;
class HomeController extends Controller {
public function index() {
$data = [
'title' => '欢迎使用自定义MVC框架',
'content' => '这是通过MVC模式渲染的首页内容。'
];
$this->view('home/index', $data);
}
public function about($name = '') {
$data = [
'title' => '关于我们',
'name' => $name ?: '访客'
];
$this->view('home/about', $data);
}
}
?>
五、创建视图文件
首页视图 (app/views/home/index.php)
<!DOCTYPE html>
<html>
<head>
<title><?php echo $data['title']; ?></title>
</head>
<body>
<h1><?php echo $data['title']; ?></h1>
<p><?php echo $data['content']; ?></p>
<a href="/home/about/Jane" rel="external nofollow" >关于Jane</a>
</body>
</html>
关于页面视图 (app/views/home/about.php)
<!DOCTYPE html>
<html>
<head>
<title><?php echo $data['title']; ?></title>
</head>
<body>
<h1><?php echo $data['title']; ?></h1>
<p>你好, <?php echo $data['name']; ?>!</p>
<a href="/" rel="external nofollow" >返回首页</a>
</body>
</html>
六、URL重写配置
.htaccess文件配置
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L]
七、使用示例与测试
完成上述代码后,你可以通过以下URL访问应用:
- 首页: http://yourdomain.com/
- 关于页面: http://yourdomain.com/home/about
- 带参数的关于页面: http://yourdomain.com/home/about/John
八、扩展功能建议
这个简易MVC框架可以进一步扩展:
- 添加数据库抽象层,支持多种数据库
- 实现ORM(对象关系映射)功能
- 添加中间件支持
- 实现依赖注入容器
- 添加模板引擎支持
- 实现路由缓存提升性能
总结
通过本教程,你已学会了如何从零开始构建一个基础的PHP MVC框架。这个框架虽然简单,但包含了MVC模式的核心概念,为你理解更复杂的框架(如Laravel、Symfony)打下了坚实基础。你可以基于这个框架继续扩展功能,打造符合自己需求的开发工具。
记住,框架的目的是提高开发效率和代码可维护性。在实际项目中,你可以根据需求选择合适的现有框架,或者继续完善这个自定义框架。

