conformity/http-message

遵循PSR7规范的http-message实现

dev-master 2015-11-23 19:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:52:51 UTC


README

遵循PSR7规范的http-message实现。

本包提供PSR7规范的简单实现。

其核心是对功能最丰富的psr7实现zend/diactoros的分支。

然而,我们发现该包有些臃肿,没有对cookies的支持(虽然这确实超出了PSR的范围)。

我们感觉包含的服务器虽然功能齐全,但对于一个完全解耦的实现来说并非必需。

因此,我们保留了现有的经过充分测试的代码库,增加了响应cookie支持,通过中间件添加了加密/解密cookie的方式,并移除了服务器和发射器。

其他一切仍以其当前的形式存在,只是命名空间已更改为Conformity\Http\Message

在基础响应类中包含了新的Conformity\Http\Message\Response\Cookie\CookieTrait,它使用了新的Conformity\Http\Message\Response\Cookie\Cookie类。

cookie trait提供了一个与PSR7规范兼容的不可变接口,用于headers

<?php

namespace Conformity\Http\Message\Response\Cookie;


trait CookieTrait
{
    /**
     * The cookies added to the response
     * @var array
     */
    protected $cookies = [];

    /**
     * List of cookie names to make lookups faster
     * @var array
     */
    protected $cookieNames = [];

    /**
     * Add a cookie header to the response
     *
     * No need to have more classes for this, simply alter the headers to include the Set-Cookie: header.
     *
     * @param mixed $name string or Cookie instance
     * @param null $value
     * @param null $expires
     * @param null $path
     * @param null $domain
     * @param bool|false $secure
     * @param bool|false $httpOnly
     *
     * @return Response new instance
     */
    public function withCookie($cookie, $value = '', $expires = null, $path = '/', $domain = null, $secure = false, $httpOnly = true);

    /**
     * Delete a cookie on the clients browser by settings the expires for the cookie in the past.
     *
     * @param $name
     * @return Response new instance
     */
    public function withoutCookie($name);

    /**
     * Check if the response has the cookie by name
     *
     * @param $name
     * @return bool
     */
    public function hasCookie($name);

    /**
     * get the cookie to modify and return
     *
     * @param $name
     * @return mixed null or Cookie instance
     */
    public function getCookie($name);

    /**
     * Return all cookies on the response
     *
     * @return array
     */
    public function getCookies();

}

此trait也可以用于任何遵循PSR7规范的反应。

我们还包含了一个简单的中间件,它可以解密请求cookie并加密响应cookie。

这是通过创建带有两个参数的中间件实例来完成的

````$middleware = new \Conformity\Http\Message\Middleware\EncryptCookies(Conformity\Http\Message\CookieEncrypterInterface $encrypter, $except = ['names', 'of', 'cookies', 'to', 'ignore']);```

CookieEncrypterInterface有两个简单的方法:encrypt($value); decrypt($value);

简单地创建一个实现此接口的类,并将其作为第一个参数传递给中间件。

这里有一个包含的Base64CookieEncoder实现,但这更多的是作为一个示例和测试,而不是一个生产就绪的加密器(base64_encode不够安全)。

创建后,只需将您的中间件实例传递给您的中间件运行器,它就会开始保护您的cookie(除了在第二个中间件构造函数参数中提供的cookie之外)。