构建您的第一个 PHP MVC 框架
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 框架是一项具有挑战性的任务,需要大量的时间和精力。拥有这样的项目经验将为你的简历增色不少。
发表评论