制作一个PHP简易框架(五)-- 优化 response

2021-03-01 10:52:53 浏览数 (1)

一 准备

二 引入容器

三 信息调试

四 路由

从混乱到有序

整合逻辑与功能,将不同职责进行分离,避免在项目变得复杂时而变得异常混乱。一个有序的明了的项目结构可以更好的帮我们理解框架的运行原理,上手也更快速。

整理 route ,路由文件中只负责对路由的定义与映射,将 request 放到 index.php 中,在单文件入口中进行处理请求并返回响应,更能体现到单文件入口的概念。

代码语言:javascript复制
# bootstrap/core/route.php
<?php

$router = new LeagueRouteRouter;

require_once __DIR__ . '/../../routes/web.php';

代码语言:javascript复制
# public/index.php
<?php

require_once __DIR__ . '/../bootstrap/app.php';

// dump($_SERVER);
$request = LaminasDiactorosServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);
$response = $router->dispatch($request);

// send the response to the browser
(new LaminasHttpHandlerRunnerEmitterSapiEmitter)->emit($response);
创建全局的辅助函数

创建全局的响应函数,用来对请求进行响应。当然可以根据功能封装更多的函数。

首先项目根目录下创建 helpers.php

代码语言:javascript复制
# helpers.php
<?php

if (!function_exists('response')) {
    function response($content = '')
    {
        $response = new LaminasDiactorosResponse;
        $response->getBody()->write($content);
        return $response;
    }
}

composer 中注册全局函数,使用 files 的自动加载方式 关于自动加载

代码语言:javascript复制
# composer.json
"autoload": {
        "psr-4": {
            "App\": "app"
        },
        "files": [
            "helpers.php"
        ]
    },

更新自动加载文件 composer dump-autoload -o

此时全局函数就已经生效了,现在修改路由文价,使用全局函数来返回数据。

代码语言:javascript复制
# routes/web.php
<?php

// map a route
$router->get('/', function ($request) {
    return response('hello world');
});
$router->get('/home', function ($request) {

    return response('hello home page');
});

此时访问系统首页和 home 路由,会输出响应的信息。说明流程没有问题。

0 人点赞