2016-03-14 4 views
-1

Вы можете исправить следующую ошибку?Symfony2 FOSREST JMS Serializer bundles error

InvalidArgumentException: "fos_rest.serializer" must implement FOS\RestBundle\Serializer\Serializer (instance of "JMS\Serializer\Serializer" given). 
in C:\wamp\www\SymfonyRestAPI\src\FOS\RestBundle\DependencyInjection\Compiler\SerializerConfigurationPass.php line 58 
at SerializerConfigurationPass->process(object(ContainerBuilder)) in C:\wamp\www\SymfonyRestAPI\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\Compiler.php line 117 
at Compiler->compile(object(ContainerBuilder)) in C:\wamp\www\SymfonyRestAPI\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\ContainerBuilder.php line 613 
at ContainerBuilder->compile() in C:\wamp\www\SymfonyRestAPI\app\bootstrap.php.cache line 2502 
at Kernel->initializeContainer() in C:\wamp\www\SymfonyRestAPI\app\bootstrap.php.cache line 2281 
at Kernel->boot() in C:\wamp\www\SymfonyRestAPI\app\bootstrap.php.cache line 2312 
at Kernel->handle(object(Request)) in C:\wamp\www\SymfonyRestAPI\web\app_dev.php line 28 
+0

Это слишком широкое. Но я думаю, вы должны добавить код своего конфигурационного файла. Какой класс связан с «fos_rest.serializer» –

+0

Я выполнил все шаги учебника symfony, но всегда ту же ошибку, в файле appKernel.php я добавил новый FOS \ RestBundle \ FOSRestBundle(), новый JMS \ SerializerBundle \ JMSSerializerBundle() – Ndb

+0

в composer.json я добавил «friendsofsymfony/rest-bundle»: «0.11. *», «jms/serializer-bundle»: «0.12.x-dev», но с той же ошибкой – Ndb

ответ

3

Это исключение было введено в FOSRestBundle 2.0 (см here) из-за сериализатору уровень абстракции, введенной в 2,0 тоже. Обычно это автоматически управляется пакетом, который определяет сериализатор JMS.

Вы добавили JMSSerializerBundle в свое ядро ​​следующим образом?

// app/AppKernel.php 
class AppKernel extends Kernel 
{ 
    public function registerBundles() 
    { 
     $bundles = array(
      // ... 
      new JMS\SerializerBundle\JMSSerializerBundle(),, 
     ); 

     // ... 
    } 
} 

Это должно быть проблема здесь.

Если это не так, то, возможно, вы пытались напрямую определить сериалайзер FOSRestBundle использует, следующий плохая практика большую часть времени и должны быть использованы только если вы знаете, что вы делаете:

// services.yml 
services: 
    fos_rest.serializer: 
     // This won't work in case your class doesn't 
     // implement FOS\RestBundle\Serializer\Serializer 
     class: My\Serializer 

Если мое второе предложение - ваше дело, пользовательский сериализатор должен реализовать интерфейс FOS\RestBundle\Serializer\Serializer.

+1

Как вы это делаете? Не могли бы вы объяснить это в своем ответе? –

+1

Извините, я имею в виду, что это может быть причиной этой ошибки, я улучшу свой ответ. –

+1

@ A.L обновлен :-) –

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