### 为什么要单独创建一个Request
禁止使用`$_SERVER`,因为这个管理不了。
在 `swoole (虽然有)` `phpunit (cli模式)` 运行怎么办? 可是没有 `$_SERVER` `$_POST` .... 等超全局变量的。
(`swoole` 有`$_SERVER` ,但是更加禁止使用)
单独创建的原因: 可以管理
## 编辑composer.json
添加映射
```
"core\\": "core/"
```
![](https://img.kancloud.cn/0a/15/0a158d29a6d796634b9112b380b329b0_383x176.png)
是不是多此一举? `composer` 自动加载并不会识别 `core`是那个目录。
`tp5`的
![](https://img.kancloud.cn/5a/05/5a05d91c99a5afed2ff549816e718d61_244x76.png)
## 关于违背psr规范
`request` 轮子 `应该` 遵守[# PSR-7 HTTP 消息接口规范](https://learnku.com/docs/psr/psr-7-http-message/1616)
你可以在这里看到 `psr-7` 的代码: https://github.com/php-fig/http-message
违背原因: 太多方法了,我是不会实现这些接口的,因为对于教程,会增加非常多的代码。
## 创建core/request/RequestInterface.php
```
<?php
namespace core\request;
interface RequestInterface
{
public function __construct($uri, $method, $headers); // 初始化
public static function create($uri, $method, $headers); // 创建request对象
public function getUri(); // 获取请求url
public function getMethod(); // 获取请求方法
public function getHeader(); // 获取请求头
}
```
## 创建 core/request/PhpRequest.php
```
<?php
namespace core\request;
class PhpRequest implements RequestInterface
{
protected $url;
protected $method;
protected $headers;
public function __construct($uri,$method,$headers)
{
$this->uri = $uri;
$this->method = $method;
$this->headers = $headers;
}
// 创建一个请求
public static function create($uri,$method,$headers = [])
{
return new static($uri, $method, $headers); // new 自己
}
public function getUri()
{
return $this->uri;
}
public function getMethod()
{
return $this->method;
}
public function getHeader()
{
}
}
```
### 运行
![](https://img.kancloud.cn/cf/1a/cf1ae28650caadd7ca7ffe44c9da645a_794x419.png)
![](https://img.kancloud.cn/47/09/4709e545d198bac2b5516c93fac1834a_543x220.png)
- 前言
- 基础篇
- 1. 第一步 创建框架目录结构
- 2. 引入composer自动加载
- 3. php自动加载 (解释篇)
- 4. 创建容器 注册树模式
- 5. 关于psr规范解释
- 6. 关于"容器" "契约" "依赖注入" (解释篇)
- 7. 添加函数文件helpers.php
- 8. 初始化请求(Request)
- 9. 响应 (Response)
- 10. 路由一 (路由组实现)
- 11. 路由二 (加入中间件)
- 12. 配置信息 (类似laravel)
- 13. 数据库连接 (多例模式)
- 14. 查询构造器 (query builder)
- MVC实现
- M 模型实现 (数据映射 + 原型 模式)
- C 控制器实现 + 控制器中间件
- V 视图实现 (Laravel Blade 引擎)
- V 视图切换成 ThinkPhp 模板 引擎)
- 其他轮子
- 日志
- 自定义异常 (异常托管)
- 单元测试 (phpunit)
- 替换成swoole的http服务器
- 协程上下文解决request问题
- qps测试
- 发布到packagist.org