我正在使用FOSRestBundle,并且想知道是否可以使用注释验证空查询参数?
例如,当调用:/ comments / 1时抛出异常,因为dealId和源查询参数都未设置.
即使源值没有设置并且与注释中概述的正则表达式不匹配,但是调用/ comments / 1?dealId = 1& source =很好.
控制器功能:
/** * Get a single comment. * * @Annotations\QueryParam(name="dealId",requirements="\d+",strict=true,description="The deal the comments belong to.") * @Annotations\QueryParam(name="source",requirements="(forum|blog)",description="The source of the comments.") * * @Annotations\View() * * @Annotations\Get("/comments/{id}",requirements={"id" = "\d+"}) * */ public function getCommentAction(Request $request,ParamFetcherInterface $paramFetcher,$id) { $dealId = $paramFetcher->get('dealId'); $source = $paramFetcher->get('source'); // TODO: Implement return [ 'id' => $id,'dealId' => $dealId,'source' => $source ]; }
更新
我在FOSRestBundle的GitHub回购中提出了这个问题,看起来我正在要求的是由于正在使用的Regex验证器的限制,目前是不可能的.
https://github.com/FriendsOfSymfony/FOSRestBundle/issues/814#issuecomment-49696288
只需使用QueryParam的allowBlank选项.在您的情况下,您将设置allowBlank为false以获得预期的行为:
在FOSRestBundle中,allowBlank选项不是YET,但是我为FOSRestBundle提供了一个补丁,这个补丁很有可能在下一个版本1.5.0的版本中登陆.
这是你的控制器的外观:
/** * Get a single comment. * * @Annotations\QueryParam(name="dealId",allowBlank=false,$id) { $dealId = $paramFetcher->get('dealId'); $source = $paramFetcher->get('source'); }