【注意】最后更新于 February 22, 2021,文中内容可能已过时,请谨慎使用。
项目地址:https://github.com/ayuayue/php-frame
制作一个PHP简易框架(一)–准备工作
制作一个PHP简易框架(二)– 引入容器
制作一个PHP简易框架(三)– 信息调试
制作一个PHP简易框架(四)– 路由系统
制作一个PHP简易框架(五)– 响应
制作一个PHP简易框架(六)– 视图模板
制作一个PHP简易框架(七)– 路由及路径优化
制作一个PHP简易框架(八)– 配置中心
制作一个PHP简易框架(九)– ORM
制作一个PHP简易框架(十)– Session and Cookie
从混乱到有序
整合逻辑与功能,将不同职责进行分离,避免在项目变得复杂时而变得异常混乱。一个有序的明了的项目结构可以更好的帮我们理解框架的运行原理,上手也更快速。
整理 route
,路由文件中只负责对路由的定义与映射,将 request
放到 index.php
中,在单文件入口中进行处理请求并返回响应,更能体现到单文件入口的概念。
1
2
3
4
5
6
7
|
# bootstrap/core/route.php
<?php
$router = new League\Route\Router;
require_once __DIR__ . '/../../routes/web.php';
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# public/index.php
<?php
require_once __DIR__ . '/../bootstrap/app.php';
// dump($_SERVER);
$request = Laminas\Diactoros\ServerRequestFactory::fromGlobals(
$_SERVER,
$_GET,
$_POST,
$_COOKIE,
$_FILES
);
$response = $router->dispatch($request);
// send the response to the browser
(new Laminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($response);
|
创建全局的辅助函数
创建全局的响应函数,用来对请求进行响应。当然可以根据功能封装更多的函数。
首先项目根目录下创建 helpers.php
。
1
2
3
4
5
6
7
8
9
10
11
|
# helpers.php
<?php
if (!function_exists('response')) {
function response($content = '')
{
$response = new Laminas\Diactoros\Response;
$response->getBody()->write($content);
return $response;
}
}
|
在 composer
中注册全局函数,使用 files
的自动加载方式 关于自动加载
1
2
3
4
5
6
7
8
9
|
# composer.json
"autoload": {
"psr-4": {
"App\\": "app"
},
"files": [
"helpers.php"
]
},
|
更新自动加载文件 composer dump-autoload -o
此时全局函数就已经生效了,现在修改路由文价,使用全局函数来返回数据。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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
路由,会输出响应的信息。说明流程没有问题。