FOSRestBundle Queryparam return 未通过时的值

FOSRestBundle Queryparam return value if not passed

我有一个控制器,其中包含许多方法,我向这些方法传递 get 参数。我希望收到一些数据作为响应(取决于我传递的参数)。我正在尝试使用 symphony 的 @QueryParam 来验证传入值,因为其中一些是必需的。

可能传递了多个参数,但第一个参数 sponsorId 是必需的,如果未传递,我想 return 类似 'ERROR: id is not set'

目前我没有使用@QueryParam,我使用的是这样的:

public function getSponsorById(Request $request)
{
  if(!$args['sponsorId']) {
     return 'ERROR: id is not set';
  }

  .....
  $sponsor = .....
  return $sponsor;
}

很简单,如果我没有得到参数,我只是 return 错误信息。 但是如何让它与 @QueryParam 一起工作?如果验证失败,我怎么说return某个值?

/**
 * @QueryParam(name="sponsorId", default="", strict=true)
 */
public function getSponsorById(Request $request)
{
  .....
  $sponsor = .....
  return $sponsor;
}

在这种情况下,您可以使用 symfony ParamFetcher class 手动完成。

在您的控制器输入参数中添加 ParamFetcher $paramFetcher:

use FOS\RestBundle\Request\ParamFetcher;

...

/**
 * @QueryParam(name="sponsorId", default="", strict=true)
 */
public function getSponsorById(Request $request, ParamFetcher $paramFetcher)
{
  $sponsorId = $paramFetcher->get('sponsorId');

  // Logic to validate $sponsorId and give it default value if not valid.
}

您还可以将 requirementsnullable 参数与任何 php 正则表达式模式一起使用,以验证您的输入并在无效时给出错误。像这样:

use FOS\RestBundle\Request\ParamFetcher;

...

/**
 * @QueryParam(name="sponsorId", nullable=true, default="", requirements="\d+", strict=true)
 */
public function getSponsorById(Request $request, ParamFetcher $paramFetcher)
{
  $sponsorId = $paramFetcher->get('sponsorId');
  // Your code.
}

如果 strict 设置为真,当正则表达式与输入不匹配时,RestBundle 抛出错误,如果 strict 为假,当正则表达式与输入不匹配时,参数将被跳过。