FOSRestBundle无法获取param fetcher

时间:2012-09-29 17:30:06

标签: php rest symfony fosrestbundle

我正在尝试让我的控制器与param fetcher一起工作。我做了文档中指定的所有说明。所以我有: 配置 fos_rest.yml:

fos_rest:
  param_fetcher_listener: 'force'
  view:
      formats:
          json: true
          xml: false
          rss: false
      mime_types:
          json: ['application/json', 'application/x-json', 'application/vnd.example-com.foo+json']
          png: 'image/png'
      failed_validation: HTTP_BAD_REQUEST
      default_engine: twig
      view_response_listener: 'force'
  format_listener:
      default_priorities:
          - json
  routing_loader:
      default_format: json

sensio_framework_extra:       view:{annotations:false}       router:{annotations:true}

我的控制器

<?php

namespace Push\PointsBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use FOS\RestBundle\View\View;
use FOS\RestBundle\Controller\Annotations\QueryParam;
use FOS\RestBundle\Request\ParamFetcherInterface;
use FOS\RestBundle\Controller\Annotations\RequestParam;
use FOS\RestBundle\Request\ParamFetcher;

class RestController extends Controller
{
    /**
     * @QueryParam(name="latitude", requirements="[0-9.]+", default="0", description="")
     * @ApiDoc()
     */
    public function checkPointsAction(ParamFetcher $params)
    {
        $view = new View();
        return $this->get('fos_rest.view_handler')->handle($view);
    }
}

当我调用方法时,我得到:

  

控制器   “推\ PointsBundle \控制器\ RestController :: checkPointsAction()”   要求您为“$ params”参数提供一个值(因为   没有默认值,或者因为存在非可选参数   在此之后)。

我做错了什么或错过了什么?谢谢。

2 个答案:

答案 0 :(得分:8)

我经常遇到FOSRestBundle和过时的缓存问题。如果我在注释中进行更改,它有时不会刷新。首先,尝试删除app / cache目录的内容(rm -rf app / cache /*).

我没有检查参数是否通过类型或名称映射到方法参数。如果比您的参数更晚,则应调用$paramFetcher(不是$params):

public function checkPointsAction(ParamFetcher $paramFetcher) { }

编辑:你启用了param fetcher listener吗?

fos_rest:
    param_fetcher_listener: true

答案 1 :(得分:1)

我有同样的问题,正如评论中指出的那样。我通过更改

中的变量名称解决了这个问题
  public function addMapAction(ParamFetcher $pf) {

  public function addMapAction(ParamFetcher $paramFetcher) {

突然之间,我的工作就像一个魅力,显然需要$ paramFetcher。