FOSRestBundle не может получить сборщик параметров

Я пытаюсь заставить свой контроллер работать с параметром 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» (поскольку нет значения по умолчанию или потому что после этого есть необязательный аргумент).

Что я сделал не так или что-то упустил? Спасибо.


person Ivan Fateev    schedule 29.09.2012    source источник
comment
Вы решили это? У меня точно такая же проблема.   -  person MartinElvar    schedule 26.01.2013


Ответы (2)


У меня часто возникают проблемы с FOSRestBundle и устаревшим кешем. Иногда он просто не обновляется, если я вношу изменения в аннотации. Во-первых, попробуйте удалить содержимое вашего каталога app/cache (rm -rf app/cache/*).

Я не проверял, сопоставляются ли параметры с аргументами метода по типу или имени. Если это позже, чем ваш параметр должен называться $paramFetcher (не $params):

public function checkPointsAction(ParamFetcher $paramFetcher) { }

Изменить: вы включили прослушиватель param fetcher?

fos_rest:
    param_fetcher_listener: true
person Jakub Zalas    schedule 29.09.2012
comment
Спасибо за ответ. Пробовал очищать кеш и пробовал переименовывать аргумент, но это совсем не помогло :( - person Ivan Fateev; 29.09.2012
comment
Я посмотрел логи и заметил, что symfony уведомляет только BodyListener. Нет записей о PararmFetcherListener - person Ivan Fateev; 29.09.2012
comment
Вы включили прослушиватель param fetcher? Я обновил свой ответ с правильной конфигурацией. - person Jakub Zalas; 30.09.2012
comment
Конечно, я тоже выложил свой конфиг. И я включил его даже с опцией Force и попробовал с опцией true. В моем случае нет никакой разницы, все еще есть ошибка - person Ivan Fateev; 30.09.2012
comment
Я забыл включить файл конфигурации в config.yml, и да, параметр должен быть точным ParamFetcher $paramFetcher - person Ivan Fateev; 26.01.2013

У меня была такая же проблема, как указано в комментарии. Я решил это, изменив имя переменной с

  public function addMapAction(ParamFetcher $pf) {

to

  public function addMapAction(ParamFetcher $paramFetcher) {

И вдруг я заработал как шарм, по-видимому, требуется $paramFetcher.

person MartinElvar    schedule 26.01.2013
comment
Я рвал на себе волосы, пытаясь заставить работать QueryParam... Это помогло мне. - person cmenning; 02.06.2014