1.概述
每个Slim应用程序实例都有一个请求对象。请求对象是当前HTTP请求的抽象,允许您轻松地与Slim应用程序的环境变量进行交互。虽然每个Slim应用程序都包含一个默认请求对象,但\Slim\Http\ request 该类是幂等的; 您可以随意(在中间件或Slim应用程序的其他位置)实例化该类,而不会影响整个应用程序。您可以获得对Slim应用程序的请求对象的引用,如下所示:
<?php
// Returns instance of \Slim\Http\Request
$request = $app->request;
2. Method
每个HTTP请求都有一个方法(例如GET或POST)。您可以通过Slim应用程序的请求对象获取当前的HTTP请求方法:
/**
* What is the request method?
* @return string (e.g. GET, POST, PUT, DELETE)
*/
$app->request->getMethod();
/**
* Is this a GET request?
* @return bool
*/
$app->request->isGet();
/**
* Is this a POST request?
* @return bool
*/
$app->request->isPost();
/**
* Is this a PUT request?
* @return bool
*/
$app->request->isPut();
/**
* Is this a DELETE request?
* @return bool
*/
$app->request->isDelete();
/**
* Is this a HEAD request?
* @return bool
*/
$app->request->isHead();
/**
* Is this a OPTIONS request?
* @return bool
*/
$app->request->isOptions();
/**
* Is this a PATCH request?
* @return bool
*/
$app->request->isPatch();
/**
* Is this a XHR/AJAX request?
* @return bool
*/
$app->request->isAjax();
3. Headers
Slim应用程序将自动解析所有HTTP请求标头。您可以使用请求对象的公共headers属性访问请求标头。该headers属性是一个实例\Slim\Helper\Set,这意味着它提供了一个简单的标准化接口,用于与HTTP请求标头交互。
<?php
$app = new \Slim\Slim();
// Get request headers as associative array
$headers = $app->request->headers;
// Get the ACCEPT_CHARSET header
$charset = $app->request->headers->get(‘ACCEPT_CHARSET’);
HTTP规范声明HTTP标头名称可以是大写,小写或混合大小写。无论您是使用大写,小写或混合大小写标题名称,还是使用下划线或短划线请求标头值,Slim都足够智能地解析并返回标头值。因此,请使用您最熟悉的命名约定。
4. Body
使用请求对象的getBody()方法获取HTTP客户端发送的原始HTTP请求主体。这对于使用JSON或XML请求的Slim应用程序特别有用。
<?php
$app = new \Slim\Slim();
$body = $app->request->getBody();
5.Variables
HTTP请求可能具有关联变量(不要与路由变量混淆)。使用当前HTTP请求发送的GET,POST或PUT变量通过Slim应用程序的请求对象公开。
如果要在不考虑其类型的情况下快速获取请求变量值,请使用请求对象的params() 方法:
<?php
$app = new \Slim\Slim();
$paramValue = $app->request->params(‘paramName’);
该params()方法首先搜索PUT变量,然后搜索POST变量,然后搜索GET变量。如果未找到变量,null则返回。如果您只想搜索特定类型的变量,则可以使用以下方法:
<?php
//GET variable
$paramValue = $app->request->get(‘paramName’);
//POST variable
$paramValue = $app->request->post(‘paramName’);
//PUT variable
$paramValue = $app->request->put(‘paramName’);
如果变量不存在,则返回上述每个方法null。您也可以在没有参数的情况下调用任何这些函数来获取给定类型的所有变量的数组:
<?php
$allGetVars = $app->request->get();
$allPostVars = $app->request->post();
$allPutVars = $app->request->put();
6. Cookie s
1)获取Cookie
Slim应用程序将自动解析使用当前HTTP请求发送的cookie。您可以使用Slim应用程序的getCookie()帮助方法获取cookie值,如下所示:
<?php
$app = new \Slim\Slim();
$foo = $app->getCookie(‘foo’);
使用此方法只能访问使用当前HTTP请求发送的Cookie。如果您在当前请求期间设置了cookie,则在后续请求之前无法使用此方法访问该cookie。请记住\ Slim \ Slim对象的getCookie()方法很方便。您也可以直接从\ Slim \ Http \ Request对象检索完整的HTTP请求cookie,如下所示:
<?php
$cookies = $app->request->cookies;
这将返回\ Slim \ Helper \ Set的实例,以便您可以使用其简单的标准化界面来检查请求的cookie。
2)Cookie加密
您可以选择使用Slim应用程序的cookies.encrypt 设置加密存储在HTTP客户端上的所有cookie 。如果是此设置true,将使用您指定的密钥和密码对所有cookie进行加密。
这真的很容易。Cookie会在发送到客户端之前自动加密。当您\Slim\Slim::getCookie()在后续请求期间请求时,它们也将按需解密。
7.Paths
Slim应用程序收到的每个HTTP请求都有一个根 URI 和一个资源URI。
1)根URI
URI的根是其中超薄应用被实例化和运行的目录的物理URL路径。如果在虚拟主机文档根目录的最顶层目录中的index.php中实例化Slim应用程序,则根URI将为空字符串。如果实例化Slim应用程序并在 虚拟主机文档根目录的物理子目录中的index.php中运行,则根URI将是该子目录的路径,该子目录具有前导斜杠且没有尾部斜杠。
2)资源URI
URI的资源是一个应用程序资源的虚拟URI路径。资源URI将与Slim应用程序的路由匹配。
假设Slim应用程序安装在虚拟主机文档根目录下的物理子目录/ foo中。还假设完整的HTTP请求URL(您在浏览器位置栏中看到的)是/ foo / books / 1。根URI是/ foo(实例化Slim应用程序的物理目录的路径),资源URI是/ books / 1(应用程序资源的路径)。
您可以使用请求对象getRootUri()和getResourceUri()方法获取HTTP请求的根URI和资源URI :
<?php
$app = new \Slim\Slim();
// Get request object
$req = $app->request;
//Get root URI
$rootUri = $req->getRootUri();
//Get resource URI
$resourceUri = $req->getResourceUri();
8.XHR
当使用像MooTools或jQuery这样的Javascript框架来执行XMLHttpRequest时,XMLHttpRequest通常会与X-Requested-With HTTP标头一起发送。Slim应用程序将检测HTTP请求的X-Requested-With标头并标记请求。如果由于某种原因无法使用X-Requested-With HTTP标头发送XMLHttpRequest,则可以通过在名为“isajax”的HTTP请求中设置GET,POST或PUT参数来强制Slim应用程序假设HTTP请求是XMLHttpRequest。 “具有真正的价值。
使用请求对象isAjax()或isXhr()方法来判断当前请求是否是XHR / Ajax请求:
<?php
$isXHR = $app->request->isAjax();
$isXHR = $app->request->isXhr();
9. Helpers
Slim应用程序的请求对象提供了几种辅助方法来获取常见的HTTP请求信息:
Content Type 内容类型
获取请求的内容类型(例如“ application / json; charset = utf-8”):
<?php
$req = $app->request;
$req->getContentType();
Media Type 媒体类型
获取请求的媒体类型(例如“application / json”):
<?php
$req = $app->request;
$req->getMediaType();
Media Type Params 媒体类型参数
获取请求的媒体类型参数(例如[charset =>“utf-8”]):
<?php
$req = $app->request;
$req->getMediaTypeParams();
Content Charset
获取请求的内容字符集(例如“utf-8”):
<?php
$req = $app->request;
$req->getContentCharset();
Content Length内容长度
获取请求的内容长度:
<?php
$req = $app->request;
$req->getContentLength();
Host
获取请求的主机(例如“slimframework.com”):
<?php
$req = $app->request;
$req->getHost();
Host with Port 主机端口
使用端口获取请求的主机(例如“slimframework.com:80”):
<?php
$req = $app->request;
$req->getHostWithPort();
Port
获取请求的端口(例如80):
<?php
$req = $app->request;
$req->getPort();
Scheme
获取请求的方案(例如“http”或“https”):
<?php
$req = $app->request;
$req->getScheme();
Path 路径
获取请求的路径(根URI +资源URI):
<?php
$req = $app->request;
$req->getPath();
URL 网址
获取请求的URL(方案+主机[如果非标准则为+端口]):
<?php
$req = $app->request;
$req->getUrl();
IP Address IP地址
获取请求的IP地址:
<?php
$req = $app->request;
$req->getIp();
Referer
获取请求的引荐来源:
<?php
$req = $app->request;
$req->getReferrer();
User Agent 用户代理
获取请求的用户代理字符串:
<?php
$req = $app->request;
$req->getUserAgent();
10.Content-Types
如何处理内容类型
默认情况下,Slim不会解析除标准表单数据之外的任何其他内容类型,因为PHP不支持它。这意味着如果您尝试发布application / json,您将无法通过$ app-> request-> post()访问数据;
要解决此问题,您必须自己解析内容类型。您可以按路由执行此操作
//For application/json
$data = json_decode($app->request->getBody());
或使用一些预先构建的中间件()