如何检查请求是不是是 Symfony2 或 Symfony3 中的 POST 或 GET 请求
Posted
技术标签:
【中文标题】如何检查请求是不是是 Symfony2 或 Symfony3 中的 POST 或 GET 请求【英文标题】:How can I check if request was a POST or GET request in Symfony2 or Symfony3如何检查请求是否是 Symfony2 或 Symfony3 中的 POST 或 GET 请求 【发布时间】:2014-05-16 03:32:43 【问题描述】:我只是想知道是否有一种非常简单的方法(最好:我可以调用一个简单的$this->container->isGet()
)来确定请求是$_POST
还是$_GET
请求。
根据文档,
Request 对象包含有关客户端请求的信息。这 可以通过几个公共属性访问信息:
request
:相当于$_POST
;query
:相当于$_GET
($request->query->get('name')
);
但我无法使用if($request->request)
或if($request->query)
进行检查,因为两者都是Request 类中的现有属性。
所以我想知道 Symfony 提供了类似的东西
$this->container->isGet();
// or isQuery() or isPost() or isRequest();
上面提到过?
【问题讨论】:
你可以像 $request->get('name') 那样做。无论请求方法是 post 还是 get..如果你真的想确定请求方法,你可以添加一个“要求:[_method:发布/获取/删除....]" 您的意思是将这一行添加到路由配置中?我确实在那里检查了限制方法,现在我想在控制器中确定它们。 如果你检查路由中的限制方法,那么只需在控制器中使用 $request->get('name') 就足够了 我正在使用一个控制器来处理这两种方法,例如就像在表格中一样(您可以使用$form->isSubmitted()
来检查这个。但就我而言,我没有/使用表格。
【参考方案1】:
如果你想在控制器中做,
$this->getRequest()->isMethod('GET');
或在您的模型(服务)中,首先将 Request 对象注入或传递给您的模型,然后执行与上述相同的操作。
编辑:Symfony 3 使用此代码
if ($request->isMethod('post'))
// your code
【讨论】:
是的,谢谢,在这里也找到了答案***.com/a/6723808/1828051 正如 MHakvoort 在他的回答中也提到的那样,$this->getRequest()
在 Symfony 2.4 中已被弃用。【参考方案2】:
或者这个:
public function myAction(Request $request)
if ($request->isMethod('POST'))
【讨论】:
已更新问题名称,以便人们在搜索时找到它【参考方案3】:或者这个:
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
if ($request->getMethod() === 'POST' )
【讨论】:
这对于 slim 来说很可能没问题,但 Symfony 的最佳实践是使用依赖注入。但是,您的解决方案在 Symfony 5 中仍然有效。【参考方案4】:由于答案建议使用现在已弃用的getRequest()
,
你可以这样做:
$this->get('request')->getMethod() == 'POST'
【讨论】:
这也被弃用了。在控制器中,您应该只使用类型提示的 $request 对象。例如,$request->getMethod() == 'POST'。【参考方案5】:你可以这样做:
if($this->request->getRealMethod() == 'post')
// is post
if($this->request->getRealMethod() == 'get')
// is get
只需在Symfony API 页面上阅读一些关于request 对象的信息。
【讨论】:
以上是关于如何检查请求是不是是 Symfony2 或 Symfony3 中的 POST 或 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LoginListener 中的 onSecurityInteractiveLogin 方法中重定向 - Symfony2