框架的Response服务包含用于生成客户端响应的全局数据。
在异步使用框架时,这些数据在每个请求结束后会恢复为默认值。
在控制器中为Response分配数据的方法:
对于从Hleb\Base\Container继承的所有类,该方法是相似的,但在控制器外的Response中形成响应被认为是坏的实践。
在应用程序代码中使用Response的示例(此情况下代码也难以维护):
还可以通过接口Hleb\Reference\Interface\Response使用依赖注入访问Response服务。
为简化示例,之后仅包含通过DI的访问。
与print和echo输出结合,Response数据将后面显示,正确的策略是仅使用一种方法输出结果。
在请求结束时,框架无论如何都会引用指定的Response对象进行输出,即使该对象未从控制器返回。 这在单次或连续地在单个控制器方法中添加数据到Response时很方便。 如有需要操作包含不同数据的响应对象,任何其他符合PSR-7的Response均可使用。 替代的Response必须在被调用的控制器方法中返回。
响应体由添加到 Response 对象中的数据组成,可以转换为字符串。 通常是展示给用户的消息文本或者格式为 JSON 或 XML 的数据,可能是动态生成的 HTML 等。
用于添加数据的 Response 服务方法有:
set() 或 setBody() — 赋值数据,完全覆盖以前存在的响应体。
add() 或 addToBody() — 在以前添加的数据末尾追加。
从服务中获取数据:
get() 或 getBody() — 获取 Response 对象中当前响应体的状态。
在向客户端发送数据之前,确保其已检查 XSS 漏洞。 如果先前未处理过此类数据,可通过 PHP 函数 htmlspecialchars() 进行过滤。
默认情况下,状态码设为 200。
如果响应需要设置不同的状态码,可以使用 setStatus() 方法,第一个参数为状态码,第二个为简短的状态消息,如果它与标准消息不同。
在 '404 Not Found' 状态中,该消息为 'Not Found'。
通常使用标准状态消息,因此可以在 set() 方法中直接通过数字参数进行设置。
通过 getStatus() 方法,可以从 Response 服务中获取当前 HTTP 状态。
除了全局服务器端响应头之外,您可以为框架返回的特定响应指定自己的头。 Response 服务的以下方法是为这第二种类型的头设计的。
setHeader() 方法根据名称设置头,如果先前有设置则覆盖其值。 在需要创建多个相同头的罕见情况下,replace 参数允许将头添加到当前值。
hasHeader() 方法检查名称是否存在头。
getHeader() 方法用于按名称获取头数据数组。
getHeaders() 方法以数组形式返回所有在 Response 中设置的头数据。
虽然使用标准 PHP 函数 对头的操作会共同起作用,但与 Response 对象一起使用时可能会出现冲突。 更好地在整个应用程序中只使用一种方法。
默认的 HTTP 协议版本是 '1.1',除非从当前请求中确定。 因为返回值通常应与请求本身相匹配,所以很少需要更改。
尽管如此,getVersion() 和 setVersion() 方法被用于分别获取和设置版本。
← Request 缓存 →