简易PHP MVC框架构建指南

在构建Web应用程序时,MVC(模型-视图-控制器)模式是一种常见的设计模式,它有助于将应用程序的业务逻辑、数据和用户界面分离开来。本文将介绍如何使用PHP创建一个简单的MVC框架。

首先,来定义一下MVC模式的三个主要组成部分:

  • 模型(Model):负责业务逻辑和数据访问。
  • 视图(View):负责展示数据。
  • 控制器(Controller):作为模型和视图之间的中介,处理用户输入并调用模型和视图。

在.NET中,创建控制器和视图非常简单,只需点击新建控制器,然后选择创建视图,就会得到一个非常简洁的控制器代码。但在互联网上,大多数网站都是基于PHP/MySQL构建的,对于一个街角的面包店来说,引入Zend或其他大型MVC框架可能有些过于复杂。因此,希望创建一个简单的PHP MVC模型,其中控制器类可以像.NET中的那样简单。

在PHP中,可以选择多种模板引擎。在本文介绍的模型中,可以轻松地插入任何喜欢的模板引擎。选择了Smarty,这是一个非常流行的PHP模板引擎。

首先需要设置一个.ini文件,其中包含一些重要的设置。然后,index.php文件应该首先解析这个文件。

[settings] controller_path="controllers/" view_path="views/" baseURL="/subdir"

接下来,需要修改.htaccess文件,以确保所有请求都通过一个单一的源进行路由。

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(\.css|\.js|\.jpg|\.jpeg|\.png|\.gif|\.flv|\.swf)$ RewriteRule ^.*$ index.php

注意例外列表。不希望将CSS路由到控制器。尽管这可能是将.sass或.less文件转换为.css的地方。

同样,对于压缩的JavaScript文件或优化的图像也是如此。

接下来,需要创建一个抽象的Controller类。所有的控制器都将继承自这个类。Controller类需要做几件事情:

  1. 查看请求URL的剩余部分,并确定控制器中应该启动哪个动作。
  2. 创建viewBag。这是一个数据“包”,实现控制器可以向其中添加数据。
  3. 确定view.html文件。
  4. 实现View()函数,将viewBag应用于模板。

构造函数的实现如下:

<?php require_once('libs/Smarty.class.php'); $config = parse_ini_file("config.ini", TRUE); if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD'])) { $requestData = ''; $method = $_SERVER['REQUEST_METHOD']; if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] > 0) { $httpContent = fopen('php://input', 'r'); while ($data = fread($httpContent, 1024)) { $requestData .= $data; } fclose($httpContent); } $urlString = substr($_SERVER['REQUEST_URI'], strlen($config['settings']['baseURL'])); $urlParts = explode('/', $urlString); if (isset($urlParts[0]) && $urlParts[0] == '') { array_shift($urlParts); } if (!isset($urlParts[0]) || $urlParts[0] == '') { $mainViewPath = "home/"; $currentController = "HomeController"; $controllerFile = "homeController.php"; } else { $mainViewPath = strtolower($urlParts[0]); $currentController = ucfirst($urlParts[0]) . "Controller"; $controllerFile = $urlParts[0] . "Controller.php"; array_shift($urlParts); } } ?>

现在知道了想要启动的控制器类。如果有人给发送了请求URL/products,希望加载productsController.php并创建一个ProductsController的实例。但首先需要关注创建一个抽象的Controller类。

接下来,需要创建视图和控制器,但首先会提醒.ini文件中包含的controller_path和view_path。这决定了文件结构:

baseURL classes Controller.php Smarty.class.php controllers homeController.php views home index.html .htaccess config.ini index.php

最后,创建HomeController和home/index.html。

<?php /* @class HomeControlelr @extends Controller @description 这是首页的控制器 */ class HomeController extends Controller { public function index() { $this->viewBag->hellomessage = "Hello world!"; return $this->View(); } } ?>

<html> <head> <title>Index</title> </head> <body> <h1>{$hellomessage}</h1> </body> </html>

基本上就是这样。虽然这需要更多的细节才能在实际生活中使用,但相信它展示了可以用PHP创建一个简单的MVC。对于小网站来说,这几乎已经足够了。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485