一、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)打下了坚实基础。你可以基于这个框架继续扩展功能,打造符合自己需求的开发工具。
记住,框架的目的是提高开发效率和代码可维护性。在实际项目中,你可以根据需求选择合适的现有框架,或者继续完善这个自定义框架。