我正在尝试让我的控制器与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”参数提供一个值(因为 没有默认值,或者因为存在非可选参数 在此之后)。
我做错了什么或错过了什么?谢谢。
答案 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。