Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PSR7请求:在Slim3中获取请求数据,如$u请求_Php_Slim_Psr 7 - Fatal编程技术网

Php PSR7请求:在Slim3中获取请求数据,如$u请求

Php PSR7请求:在Slim3中获取请求数据,如$u请求,php,slim,psr-7,Php,Slim,Psr 7,我正在使用PSR-7请求重构我的应用程序,使用Slim3作为路由器。在我的一些入口点上,我收到了来自外部应用程序的GET和POST HTTP请求。GET和POST都使用相同的参数名。在旧代码中,一个简单的$\u请求解决了这个问题,但我不想再使用superglobals了 为了获取GET请求的参数,我使用以下代码: $parameters = $request->getQueryParams(); 对于POST请求,我使用: $parameters = $request->getPa

我正在使用PSR-7请求重构我的应用程序,使用Slim3作为路由器。在我的一些入口点上,我收到了来自外部应用程序的GET和POST HTTP请求。GET和POST都使用相同的参数名。在旧代码中,一个简单的
$\u请求
解决了这个问题,但我不想再使用superglobals了

为了获取GET请求的参数,我使用以下代码:

$parameters = $request->getQueryParams();
对于POST请求,我使用:

$parameters = $request->getParsedBody();

是否有PSR-7函数来解决此问题,或者每次都必须使用
array\u merge()

在PSR-7本身中,请求接口上没有方法来执行您的请求

可能有一些实现提供了它,但我会觉得很奇怪

如果可以的话,最简单的方法可能是扩展ServerResponseInterface实现,您正在使用一个新的方法来实现您所需要的功能


Slim
中,您可以覆盖
请求
配置键,提供您自己的请求对象

在PSR-7本身中,请求接口上没有方法来执行您的请求

可能有一些实现提供了它,但我会觉得很奇怪

如果可以的话,最简单的方法可能是扩展ServerResponseInterface实现,您正在使用一个新的方法来实现您所需要的功能



Slim
中,您可以覆盖
request
配置键,提供您自己的请求对象Slim的请求对象具有
getParam()
getParams()
,这是您想要的。但是,这些不是PSR-7的一部分。

Slim的请求对象有
getParam()
getParams()
,它们可以满足您的需要。但是,这些不是PSR-7的一部分。

请告诉我们您编写的方法实际上是什么样子。@Martin这个问题并不是针对特殊实现的。通常您有一个回调函数,如
函数($request,$response){/*做一些事情*/}
,有关更多信息,请参阅Slim3文档。这是一个非常常见的微操作模式。PSR-7不建议或甚至考虑使用<代码> $<请求< /代码>。@ DanFromGermany抱歉,我的问题似乎不太清楚。我也不想使用
$\u REQUEST
,这就是这个问题的原因。但是,在请求中使用GET或POST时,必须处理没有明确定义的URL是一个常见的问题,至少在我的经验中是这样,尤其是在旧站点上。请告诉我们您编写的方法实际上是什么样子的。@Martin这个问题并不是针对特殊实现的。通常您有一个回调函数,如
函数($request,$response){/*做一些事情*/}
,有关更多信息,请参阅Slim3文档。这是一个非常常见的微操作模式。PSR-7不建议或甚至考虑使用<代码> $<请求< /代码>。@ DanFromGermany抱歉,我的问题似乎不太清楚。我也不想使用
$\u REQUEST
,这就是这个问题的原因。但是,在请求中使用GET或POST时,必须处理没有明确定义的URL是一个常见问题,至少在我的经验中是这样,尤其是在旧站点上。谢谢,只是为了确保:我使用函数和初始化Slim从Slim扩展了ServerResponse类,我在容器中设置了一个空的
请求
,slim使用这个实例来解析HTTP请求?不完全是空的,在构造它时需要向它传递一些参数。看看Slim本身在其
容器中的表现。registerDefaultServices
方法我相信您指的是类
DefaultServicesProvider
。通过阅读slim3源代码,我发现slim实现了一个名为
createFromEnvironment
的非psr-7方法,因此我可以继承
\slim\Http\Request
,并可以使用我的类配置注入容器。但这可能会导致未来slim版本的命名冲突。我担心,我会坚持使用我的
数组\u merge()
,但是谢谢。对不起,我在Slim(3.1)上有一个较旧的版本,所以该方法在另一个地方。。。无论如何,不管您决定如何继续,尝试隔离您的行为以不违反DRY原则(另一个不太优雅的选项可能是在Utils类中有一个静态方法,例如…)是的,静态方法也是我认为要实现的。但谢天谢地,@RobAllen在他的回答中写道,slim请求对象中已经有了一个合适的
getParams()
-方法。但我想,作为slim的核心开发人员肯定有一些优势;-)谢谢,只是想确定一下:我用一个函数从Slim扩展了ServerResponse类,在初始化Slim时,我在容器中设置了一个空的
请求
,Slim使用这个实例解析HTTP请求?不完全是空的,在构造它时需要向它传递一些参数。看看Slim本身在其
容器中的表现。registerDefaultServices
方法我相信您指的是类
DefaultServicesProvider
。通过阅读slim3源代码,我发现slim实现了一个名为
createFromEnvironment
的非psr-7方法,因此我可以继承
\slim\Http\Request
,并可以使用我的类配置注入容器。但这可能会导致未来slim版本的命名冲突。我担心,我会坚持使用我的
数组\u merge()
,但是谢谢。对不起,我在Slim(3.1)上有一个较旧的版本,所以该方法在另一个地方。。。无论如何,不管您决定如何继续,尝试隔离您的行为以不违反DRY原则(另一个不太优雅的选项可能是在Utils类中有一个静态方法,例如…)是的,静态方法也是我认为要实现的。但谢天谢地,@RobAllen在他的回答中写道,sl中已经有了一个合适的
getParams()
-方法