2016-09-23 11 views
2

Как я могу указать каталог метаданных для сериализатора, используемый FOSRestBundle на уровне контроллера?FOSRESTBundle: как изменить метаданные на сериализаторе на уровне контроллера

Я не могу установить его в config.yml, потому что в моем случае это зависит от маршрута запроса.

Я видел в JMSSerializer doc, что я мог бы использовать следующий код

$serializer = JMS\Serializer\SerializerBuilder::create() 
    ->addMetadataDir($someDir) 
    ->build(); 

Но как применить его к уже инстанциирован сериализатору (или как заменить его)?

ответ

1

Боюсь, что это невозможно.

Каталоги установлены на драйверы метаданных при вызове build() in SerializerBuilder.php.

Несмотря на то, что you can access the metadata factory используется Serializer, это, вероятно, вам не поможет, потому что завод не имеет ничего общего с каталогами кеша. Только драйверы работают с каталогами.

Таким образом, единственный вариант для вас - это, вероятно, создать новый экземпляр Serializer и использовать его вместо него.

Редактировать: Создание нового Serializer работает так же, как в вашем вопросе. Затем ваш контейнер DI должен быть экземпляром Container, который имеет метод set(), который позволяет вам переопределить любую зарегистрированную службу.

+0

Спасибо за ответ. Не могли бы вы добавить к вашему ответу, как я мог бы «создать новый экземпляр Serializer и использовать его вместо« DI »* с помощью FOSRestBundle? – marcv

+0

Я обновляю свой ответ. – martin

+0

ОК, я до сих пор не вижу, как я могу применить это к FOSRestBundle, но я все равно приму ваш ответ. Благодарю. – marcv

 Смежные вопросы

  • Нет связанных вопросов^_^