如果未通过FOSRestBundle Queryparam返回值

时间:2017-04-26 17:25:38

标签: php symfony validation fosrestbundle

我有一个控制器,有许多方法可以传递参数。我期望得到一些响应的数据(取决于我通过的参数)。我正在尝试使用symphony的@QueryParam来验证传入的值,因为其中一些是必要的。

传递的参数可能超过1个,但第一个参数sponsorId是必要的,如果没有传递,我想返回类似'错误:id未设置'的内容

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

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

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

很简单,如果我没有得到参数,我只返回错误信息。 但是如何使它与@QueryParam一起使用?如果验证失败,我怎么说它会返回某个值呢?

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

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用symfony <section id="featured" class="dynamic-bg"> <div class="inner"> <div class="flexslider effect7"> <ul class="slides"> <li> <div class="flexslider-item"> <img src="images/slider/kitchen_adventurer_caramel.jpg" data-adaptive-background /> <p class="flex-caption">Adventurer Cheesecake Brownie</p> </div> </li> <li> <div class="flexslider-item"><img src="images/slider/kitchen_adventurer_cheesecake_brownie.jpg" data-adaptive-background /> <p class="flex-caption">Adventurer Lemon</p> </div> </li> <li> <div class="flexslider-item"><img src="images/slider/kitchen_adventurer_donut.jpg" data-adaptive-background /> <p class="flex-caption">Adventurer Donut</p> </div> </li> <li> <div class="flexslider-item"><img src="images/slider/kitchen_adventurer_lemon.jpg" data-adaptive-background /> <p class="flex-caption">Adventurer Caramel</p> </div> </li> </ul> </div> 类手动执行此操作。

在你的控制器输入参数中添加 ParamFetcher $ 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. } requirements参数与任何验证输入的php regex模式一起使用,如果无效则会出错。像这样:

nullable

如果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. } 设置为true,当正则表达式与输入不匹配时,RestBundle抛出错误,如果strict为false,则当正则表达式与输入不匹配时,参数刚跳过。