Как применить ParamConverter только к определенному контроллеру?

Я работаю над миграцией существующего Symfony 2.8 проект для Symfony 3.4, Помимо версии Symfony также sensio/framework-extra-bundle был обновлен с 3.0.19 в 5.2.4,

Проект использует сепарат ParamConverter для двух разных контроллеров. Хотя это работало нормально в Symfony 2.8 проект, он терпит неудачу в Symfony 3.4 проект. Кажется, что теперь оба преобразователя применяются к обоим контроллерам.

// The first controller uses a standard `fos_rest.request_body` converter
class ControllerA extends FOSRestController {
/**
* @FOSRest\View()
* @ParamConverter("chartOptions", converter="fos_rest.request_body")
*/
public function chartDataAction(Request $request, ChartOptions $chartOptions) {
...
}
}

class ChartOptions {
public $date;
public $name;
public $title;
}


// The second controller uses a FOS\RestBundle\Request\RequestBodyParamConverter subclass as converter
class ControllerB extends FOSRestController {
/**
* @FOSRest\View()
* @ParamConverter("dataBag", converter="custom_converter")
*/
public function dataAction(Request $request, DataBag $dataBag) {
...
}
}

class CustomConverter extend RequestBodyParamConverter {
...

public function apply(Request $request, ParamConverter $configuration) { ... }
}


// services.yml
...
AppBundle\Util\CustomConverter:
autowire: true
tags:
- { name: request.param_converter, converter: custom_converter }
arguments:
$serializer: '@fos_rest.serializer'
$validator: '@?fos_rest.validator'

Я бы предположил, что каждый из этих двух преобразователей применяется только тогда, когда вызывается соответствующий контроллер. Это работало в Symfony 2.8 но дело не в Symfony 3.4,

Когда я открываю страницу, которая звонит chartDataAction() используя Ajax вызов исключение выбрасывается CustomConverter.apply(...) Проблема в том, что apply() Метод не предназначен для обработки содержимого этого вызова.

Конечно, я мог бы поймать / обработать исключение, но это не решило бы общую проблему: Почему CustomConverter используется вообще на этом звонке?

После некоторых исследований я попытался решить проблему, установив auto_convert в false в пределах config.yml :

# app/config/config.yml
sensio_framework_extra:
request:
converters: true
auto_convert: false

Хотя это, похоже, решает проблему с CustomConverter Теперь я получаю еще одно исключение:

Uncaught PHP Exception RuntimeException: «Конвертер
‘fos_rest.request_body’ не поддерживает преобразование параметра
‘chartOptions’

Итак, что может быть причиной проблемы? Как применять преобразователи только для конкретных контроллеров?

РЕДАКТИРОВАТЬ:

После перечитывания Symfony документы Меня еще больше смущает это поведение:

Чтобы определить, какой преобразователь работает по параметру, выполните следующий процесс
выполняется:

Если с помощью @ParamConverter (converter = «name») был сделан явный выбор конвертера, конвертер с указанным именем будет
выбран. В противном случае все зарегистрированные преобразователи параметров повторяются по приоритету.

Оба контроллера указывают конвертер, используя @ParamConverter(converter="name"), Так почему же custom_converter применительно к chartDataAction() вместо fos_rest.request_body, ?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector