系统 Request 对象是在框架处理 HTTP 请求的最初阶段创建的。
它不仅被创建,还被填充了信息(标头、参数等)
该对象有助于 HLEB2 框架在处理请求时的初始运行。
系统 Request 对象仅用于此目的。
默认情况下可以从容器中获取的 Request 服务,它是一个包裹在系统对象上的封装,通过它可以使用当前请求的数据。
使用当前 HTTP 方法从控制器(和所有从 Hleb\Base\Container 继承的类)中的 Request 获取数据的方法:
在应用程序代码中从 Request 获取 HTTP 方法的示例:
此外,通过 依赖注入 可以通过 Hleb\Reference\Interface\Request 接口获取 Request 对象。
为简化示例,今后的示例将仅包含通过 Hleb\Static\Request 的引用。
请求应用程序时会使用特定的 HTTP 方法;框架支持以下方法:'GET', 'POST', 'DELETE', 'PUT', 'PATCH', 'OPTIONS'(以及 'HEAD')。
方法 getMethod() 和 isMethod() 帮助确定当前的方法。
前者返回一个值,例如 'GET',而在 isMethod(...) 方法中需要指定要比较的值。
随请求发送的数据可以以各种方式使用。 它们可以以原始形式保存,这样不需要预处理。 但是,如果需要立即在响应中显示数据,则应保护数据免受可执行脚本的注入。 get() 和 post() 方法返回一个带有相应参数的对象。这个对象可以用来获取原始数据和转换成所需格式的数据。
使用这些方法返回的对象时,最常见的错误是将该对象用作值,而不是从对象中获取值。
如果需要将结果作为数组,例如用于查询 '?param[key]=value',具有该值的对象有一个 asArray() 方法,该方法可以保护数组值免受 XSS 漏洞的影响。value() 方法会返回一个数组,但其中包含原始的未处理数据。
input() 方法用于确定并从请求体中获取数据数组。
这些可能是 JSON 数据或 url-encoded 参数,转换为数组。
因此,您可以以数组形式获取 POST-,PUT-,PATCH- 或 DELETE 参数,或 JSON 格式的请求体中的参数。
通过 input() 方法获得的数据表示处理过的值,HTML 标签转换为特殊字符。
如果需要以数组形式获得请求体的原始数据,则 getParsedBody() 方法就是为此而设计的。 它类似于 input(),但返回未经处理的数据。
如果前面的格式不合适,请求体的原始形式作为字符串值由 getRawBody() 方法返回。 这样可以自己将数据转换为所需的格式。
这些请求参数涉及到路线的动态部分,在请求中为其分配了特定的值。 param() 方法允许通过动态参数的名称来获取这些值。 结果将是一个对象,通过该对象可以以所需格式获取值。
例如,如果请求匹配了如下形式的路由:
对于地址 /10/main/,参数 'version' 和 'page' 的定义如下:
使用该方法返回的对象时,常见的错误是将对象当作值本身使用,而不是从对象中提取值。
data() 方法返回所有动态参数的对象数组。 可以类似地从这些对象中获取参数的原始和处理后的值。
要以未经处理的值数组形式获取原始动态路由参数,请使用 rawData() 方法。
请注意,当框架处理传入数据时(当选择此选项时),它仅防止 XSS 攻击。在其他情况下,例如需要为数据库存储进行引号转义时,必须应用附加的安全措施。
由 getUri() 方法返回的对象基于 PSR-7 的 UriInterface,可以获取以下请求数据:
getUri()->getHost() - 当前请求的域名,例如 'mob.example.com'。如果请求中包含端口,可能会一起返回。
getUri()->getPath() - 地址中主机之后的路径,例如 '/ru/example/page' 或 '/ru/example/page/'。
getUri()->getQuery() - 查询参数,例如 '?param1=value1¶m2=value2'。
getUri()->getPort() - 请求的端口。
getUri()->getScheme() - 请求的 HTTP 协议方案,如 'http' 或 'https'。
getUri()->getIp() - 请求的 IP 地址。
为了确认 HTTP 协议的类型,可以使用 isHttpSecure() 方法。 它会返回是否为 'https' 的检查结果。
getHttpScheme() 方法返回当前的 HTTP 协议方案为 'http://' 或 'https://'。
getHost() 方法用于获取当前请求的域名。 与 getUri()->getHost() 等效。
使用 getSchemeAndHost() 方法可以同时获取 HTTP 协议方案和主机名。
getAddress() 方法返回请求的完整 URL,不包含 GET 参数。
当用户上传文件时,可以使用方法getFiles()获取其数据。 它返回一个包含数据的数组数组或者对象数组,具体取决于框架是否通过外部Request初始化。
所有传入请求头的数组由方法getHeaders()返回。 这些是按键(名称)排序的请求头。
可以通过方法hasHeader()检查是否存在某个名称的头。
方法getHeader()根据名称返回匹配的头(值)的数组。
方法getHeaderLine()也根据名称返回头值,但以枚举形式的字符串。
要获取由web服务器设置在$_SERVER变量中的数据,可以使用方法server()。 它根据参数名称返回值。
方法getProtocolVersion()返回请求协议版本,例如 '1.1'。
← 依赖注入 响应 →