MVC 是软件开发中常用的一种设计模式,尤其是 Web 应用程序开发中。它将应用程序分为三个互连的组件:模型、视图和控制器。这种分层结构可以提高模块化性、可维护性和易于开发性。
模型 (M)代表应用程序的数据和业务逻辑。这意味着它负责检索、操作和存储数据。
视图(V)充当表示层,负责将数据呈现给最终用户。
控制器(C)是模型和视图之间的中介。它接收用户输入并确定要调用哪个或哪些模型以及要呈现哪个视图。
MVC 模式通过将应用程序分为三个互相独立的组件,来强制关注点分离。这种分离使得应用程序更加易于理解、维护和扩展。
先决条件
在本教程中,您将学习如何从头开始构建简单的 PHP MVC 框架。为了继续进行,您应该对以下内容有基本的了解:
PHP OOP 概念
Composer — PHP 包管理器 HTML/CSS - 框架不需要,但构建之后的页面需要
设置项目
要创建一个新的 Composer 项目,请执行以下步骤:
创建一个新目录并将其命名为您的项目名称。 在您的编辑器中打开该目录。 在终端中运行 composer init命令。
composer init
在 composer init 过程中,您可以按 Enter 键跳过除开发依赖项之外的所有问题。当系统要求您添加依赖项时,请暂时键入“no”。
为简单起见,我们将命名空间更改为更短的名称,例如 App. 为此,请更改composer.json文件中“psr-4”的密钥:
"Maheshsamudra\\SimplePhpMvcStarter\\" -> "App\\"
然后,运行composer dump-autoload它将更新项目中必须包含的类。
目录结构
public/ # 此处作为域的指向目标
src/
Controllers/
Models/
Routes/
Views/
vendor/ # 由composer自动创建
构建核心组件
设置公用文件夹
在 public/ 目录中创建名为 index.php 的新文件。该文件将作为应用程序的入口点。
<?php
require '../vendor/autoload.php' ;
$router = require '../src/Routes/index.php' ;
处理路线
在 src/ 目录中创建 Router.php 文件。该文件将负责将路由映射到正确的控制器。
<?php
namespace App;
class Router
{
protected $routes = [];
private function addRoute($route, $controller, $action, $method)
{
$this->routes[$method][$route] = ['controller' => $controller, 'action' => $action];
}
public function get($route, $controller, $action)
{
$this->addRoute($route, $controller, $action, "GET");
}
public function post($route, $controller, $action)
{
$this->addRoute($route, $controller, $action, "POST");
}
public function dispatch()
{
$uri = strtok($_SERVER['REQUEST_URI'], '?');
$method = $_SERVER['REQUEST_METHOD'];
if (array_key_exists($uri, $this->routes[$method])) {
$controller = $this->routes[$method][$uri]['controller'];
$action = $this->routes[$method][$uri]['action'];
$controller = new $controller();
$controller->$action();
} else {
throw new \Exception("No route found for URI: $uri");
}
}
}
现在,要设置初始路由,请在 src/ 目录中创建 Routes.php 文件。您可以在此文件中映射 POST 和 GET请求的路由。
<?php
use App\Controllers\HomeController;
use App\Router;
$router = new Router();
$router->get('/', HomeController::class, 'index');
$router->dispatch();
控制器 - 处理主页
首先,在 src/ 目录中创建 Controller.php 文件夹。
<?php
namespace App;
class Controller
{
protected function render($view, $data = [])
{
extract($data);
include "Views/$view.php";
}
}
现在,我们需要创建一个 HomeController 来处理请求。在 src/Controllers/ 目录中创建 HomeController.php 文件,并在其中添加一个 index() 方法来处理主页。
<?php
namespace App\Controllers;
use App\Controller;
class HomeController extends Controller
{
public function index()
{
$this->render('index');
}
}
添加视图
最后,要提供主页,请在 src/Views/ 目录中创建 index.php 文件。
<h1>Welcome to Simple PHP MVC Starter!</h1>
测试进度
现在,该应用程序已准备好提供主页服务。在公用文件夹中运行内置 PHP Web 服务器即可测试。
cd simple-php-mvc-starter
php -S localhost:9999
如果一切正常,您应该在浏览器中看到以下内容:

创建模型
在 Models/ 目录中创建一个名为 Journals.php 的新文件。该文件代表应用程序中的期刊。
<?php
namespace App\Models;
class Journal
{
public $name;
public $publishedYear;
public function __construct($name, $publishedYear)
{
$this->name = $name;
$this->publishedYear = $publishedYear;
}
}
现在,让我们向主页添加一些期刊。更新HomeController.php以加载日志。
<?php
namespace App\Models;
class Journal
{
public $name;
public $publishedYear;
public function __construct($name, $publishedYear)
{
$this->name = $name;
$this->publishedYear = $publishedYear;
}
}
最后,更新 Views/ 目录中的 index.php 文件。
<h1>Welcome to Simple PHP MVC Starter!</h1>
<ul>
<?php foreach ($journals as $journal) : ?>
<li><?= $journal->name ?> (<?= $journal->publishedYear ?>)</li>
<?php endforeach; ?>
</ul>
就是这样。您已经成功构建了您的第一个 PHP MVC 框架。
虽然这是一个简单的开始,但从头开始创建 PHP MVC 框架是一项具有挑战性的任务,需要大量的时间和精力。拥有这样的项目经验将为你的简历增色不少。
匿名
2025-10-22
盖楼盖楼!
匿名
2025-08-11
沙发沙发
匿名
2025-08-10
https://at.oiik.cn/bing.html
匿名
2025-02-21
实用,我在开发https://minmail.app/时候使用到了
王飞翔
2024-12-30
亲爱的朋友:您好!中国疫情持续蔓延,很多人症状非常严重持久不愈,医院人满为患,各年龄段随地倒猝死的现象暴增,多省感染手足口、甲流、乙流、支原体、合胞及腺病毒的儿童不断攀升,目前各种天灾人祸,天气异象频发。古今中外的很多预言都说了这几年人类有大灾难,如刘伯温在预言中说 “贫者一万留一千,富者一万留二三”,“贫富若不回心转,看看死期到眼前”, 预言中也告诉世人如何逃离劫难的方法,真心希望您能躲过末劫中的劫难,有个美好的未来,请您务必打开下方网址认真了解,内有躲避瘟疫保平安的方法。网址1:https://github.com/1992513/www/blob/master/README.md?abhgc#1 网址2:bitly.net/55bbbb 网址3:https://d3ankibxiji86m.cloudfront.net/30gj 如打不开请多换几个浏览器试
匿名
2024-12-12
Backdata 搜索引擎网址提交入口:https://backdata.net/submit-site.html