构建您的第一个 PHP MVC 框架

admin 2023-11-14 505 阅读 0评论

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

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 505人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表