2

我正在尝试让我的控制器与 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:视图:{注解:假}路由器:{注解:真}

还有我的控制器

<?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);
    }
}

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

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

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

4

2 回答 2

11

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

我没有检查参数是否通过类型或名称映射到方法参数。如果它晚于你的参数应该被调用$paramFetcher(不是$params):

public function checkPointsAction(ParamFetcher $paramFetcher) { }

编辑:您是否启用了参数获取器侦听器?

fos_rest:
    param_fetcher_listener: true
于 2012-09-29T17:48:38.553 回答
1

正如评论中指出的那样,我遇到了同样的问题。我通过更改变量名称解决了这个问题

  public function addMapAction(ParamFetcher $pf) {

  public function addMapAction(ParamFetcher $paramFetcher) {

突然间,我像一个魅力一样工作,显然 $paramFetcher 是必需的。

于 2013-01-26T10:45:50.940 回答