PHP中PSR 7,Symfony已经支持PSR-7

差一点两周之前,PHP社区大致接受了PSR-7,给了PHP一个 HTTP Message Interface 的常规集合。这在贯穿PHP全部内容的互用性和标准化方面具有非常大的潜力。对于中间件(middleware)来说具有决定意义:函数已可介入request-response进程,如果一个中间件围绕着这些新接口来写就,它可以用在任何一个框架中。

引入PSR HTTP Message Bridge

现如今,数量 众多 的项目使用了Symfony的 Request 和 Response 类(通过 HttpFoundation 组件),包括Laravel,Drupal 8和StackPHP。这在过去四年中给了我们一个HTTP Messages标准化的基础,在PHP社区准备讨论出一种官方接口之前。提升交互性,正是Symfony哲学的核心。

正因如此,我们战栗地宣布0.1版 PSR HTTP Message Bridge:这个类库可以双向转换Symfony的 Request 和 Response 对象到PSR-7兼容对象。这意味着一旦为PSR-7写一个中间件,则使用HttpFoundation的程序都将兼容它。

从PSR-7对象转换到HttpFoundation就像下面这样容易:

1

2

3

4

5

6

7

8

9

10

11

12

13use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;

$httpFoundationFactory = new HttpFoundationFactory();

// convert a Request 转换一个Request

// $psrRequest is an instance of Psr\Http\Message\ServerRequestInterface

// $psrRequest是一个Psr\Http\Message\ServerRequestInterface实例

$symfonyRequest = $httpFoundationFactory->createRequest($psrRequest);

// convert a Response 转换一个Response

// $psrResponse is an instance of Psr\Http\Message\ResponseInterface

// $psrResponse是一个Psr\Http\Message\ResponseInterface实例

$symfonyResponse = $httpFoundationFactory->createResponse($psrResponse);

你也可以将一个HttpFoundation对象转换到PSR-7。为了实现这个,桥接使用了Diactoros——这是一个早期的PSR-7 implemetation:

1

2

3

4

5

6

7

8

9

10

11

12

13use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Component\HttpFoundation\Response;

$psr7Factory = new DiactorosFactory();

// convert a Request 转换一个请求

$symfonyRequest = Request::createFromGlobals();

$psrRequest = $psr7Factory->createRequest($symfonyRequest);

// convert a Response 转换一个响应

$symfonyResponse = new Response('Content');

$psrResponse = $psr7Factory->createResponse($symfonyResponse);

这可以让项目立即享用PSR-7,但却毋需破坏向下兼容性。这实在很重要:Symfony引以为傲的 向下兼容承诺 将不被破坏。

十分感谢douglas(Symfony框架核心开发成员),他做了很多针对这个类库的初始工作。文档编写也已经在 进行中,桥接目前也面临着一些关于大规模请求和响应体的极端状况。但这仅仅是个开始,我们正满怀期待。

Symfony框架中的RequestInterface和ResponseInterface

在Symfony框架中,控制器通常接收Symfony的 Request 对象并返回一个Symfony的 Response 对象。现在,你可以选择接收PSR-7的请求和响应对象来替代,多亏了 SensioFrameworkExtraBundle 的小补丁:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18namespace AppBundle\Controller;

use Psr\Http\Message\ServerRequestInterface;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Zend\Diactoros\Response;

class DefaultController extends Controller

{

public function indexAction(ServerRequestInterface $request)

{

// Interact with the PSR-7 request 操作PSR-7请求

$response = new Response();

// Interact with the PSR-7 response 操作PSR-7响应

return $response;

}

}

在最新版的SensioFrameworkExtraBundle中已经可以利用,并且兼容自Symfony 2.3以来每一个维护中的版本。如果这种情形是你要在控制器中做的,你可以马上开始!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值