当前位置: 首页 > 面试题库 >

如何在Zend Framework 2中访问route,post,get等参数

殳飞扬
2023-03-14
问题内容

如何获得与zf2中的页面请求相关的各种参数?像发布/获取参数一样,正在访问的路由,发送的标头和上传的文件。


问题答案:

最简单的方法是使用beta5中引入的Params插件。它具有实用方法,可轻松访问不同类型的参数。与往常一样,阅读测试对于了解应该如何使用某些东西非常有价值。

获得单一价值

要获取控制器中命名参数的值,您将需要为要查找的参数类型选择适当的方法并传递名称。

例子:

$this->params()->fromPost('paramname');   // From POST
$this->params()->fromQuery('paramname');  // From GET
$this->params()->fromRoute('paramname');  // From RouteMatch
$this->params()->fromHeader('paramname'); // From header
$this->params()->fromFiles('paramname');  // From file being uploaded

默认值

所有这些方法还支持默认值,如果未找到具有给定名称的参数,则将返回默认值。

例:

$orderBy = $this->params()->fromQuery('orderby', 'name');

当访问http://example.com/?orderby=birthdate时,
$ orderBy 将具有值 birthdate 。 访问http://example.com/时, $ orderBy 将具有 默认
name

获取所有参数

要获取一种类型的所有参数,只需不输入任何内容,Params插件将返回一个以其名称为键的值数组。

例:

$allGetValues = $this->params()->fromQuery(); // empty method call

访问http://example.com/?orderby=birthdate&filter=hasphone时,
$ allGetValues 将是一个数组,例如

array(
    'orderby' => 'birthdate',
    'filter'  => 'hasphone',
);

不使用Params插件

如果检查Params插件的源代码,您会发现它只是其他控制器的薄包装,可以实现更一致的参数检索。如果出于某种原因想要/需要直接访问它们,则可以在源代码中看到它是如何完成的。

例:

$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');

注意: 您可能已经使用了超全局变量$ _GET,$ _ POST等,但是不建议这样做。



 类似资料:
  • 我知道如何获取如下查询的参数: 在这种情况下,我可以使用获取参数(例如中的)。 但是,对于类似的url,如何访问变量? 我尝试了,但没有成功。

  • 问题内容: 我的POST方法看起来像这样: 当我在Netbeans中创建Jersey客户时,调用post方法的方法如下所示: 运行此测试时: 它在服务器中提供以下输出: 我需要更改什么才能使参数给出正确的值? 问题答案: 你的方法应该接受JSON对象而不是字符串。Jersey使用JAXB支持封送和拆封JSON对象(有关详细信息,请参阅jersey文档)。创建一个类似的类: 然后,你的方法将如下所示

  • 问题内容: 我有一个应用程序,它基本上是服务的代理。该应用程序本身是在Jersey上构建的,由Jetty提供。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。除了一个细节外,UriInfo和HttpServletRequest被适当地注入:似乎没有参数。这是我从终端发送的请求: 此处的POST正文显然包含两个参数:foo和biz。但是,当我尝试在代码()中获取它们时,结果是

  • 我有一个应用程序,基本上是一个服务的代理。该应用程序本身是基于Jersey构建的,由Jetty提供服务。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。UriInfo和HttpServletRequest被适当地注入,除了一个细节:似乎没有参数。这是我从终端发送的请求: 这里,POST正文显然包含两个参数:foo和biz。但当我尝试在代码中获取它们时(),结果是一个大小为0

  • 问题内容: 我知道如何为这样的查询获取参数: 在这种情况下,我可以使用获取参数(例如中的)。 但是,对于url like ,如何访问变量? 我试过了,但是没有用。 问题答案: 因此,在检查了快速参考之后,我发现它将返回我想要的值。 req.params是指URL中带有“:”的项目,而req.query是指与“?”相关的项目。 例: 然后,快递员:

  • 创建资源“/flowers”和GET方法 获取->方法请求->URL查询字符串参数->添加了“颜色” 获取->集成请求->类型:Lambda函数 获取->集成请求->URL查询字符串参数->添加的, 我试图访问lambda处理程序中的参数,但事件总是空的,我不知道参数应该在哪里 我想我不能使用主体映射tamplate,除非我没有使用get的请求主体。