Ver Fonte

made the handling of Doctrine proxies generic

lsmith77 há 13 anos atrás
pai
commit
730ad94fda

+ 4 - 4
DependencyInjection/Factory/DoctrineOrmProxyFactory.php

@@ -6,11 +6,11 @@ use JMS\SerializerBundle\DependencyInjection\HandlerFactoryInterface;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
 
-class DoctrineOrmProxyFactory implements HandlerFactoryInterface
+class DoctrineProxyFactory implements HandlerFactoryInterface
 {
     public function getConfigKey()
     {
-        return 'doctrine_orm_proxy';
+        return 'doctrine_proxy';
     }
 
     public function getType(array $config)
@@ -28,6 +28,6 @@ class DoctrineOrmProxyFactory implements HandlerFactoryInterface
 
     public function getHandlerId(ContainerBuilder $container, array $config)
     {
-        return 'jms_serializer.doctrine_orm_handler';
+        return 'jms_serializer.doctrine_handler';
     }
-}
+}

+ 3 - 3
JMSSerializerBundle.php

@@ -23,7 +23,7 @@ use JMS\SerializerBundle\DependencyInjection\Factory\DateTimeFactory;
 use JMS\SerializerBundle\DependencyInjection\Factory\ConstraintViolationFactory;
 use JMS\SerializerBundle\DependencyInjection\Factory\ArrayCollectionFactory;
 use JMS\SerializerBundle\DependencyInjection\Factory\ObjectBasedFactory;
-use JMS\SerializerBundle\DependencyInjection\Factory\DoctrineOrmProxyFactory;
+use JMS\SerializerBundle\DependencyInjection\Factory\DoctrineProxyFactory;
 use JMS\SerializerBundle\DependencyInjection\JMSSerializerExtension;
 use Symfony\Component\HttpKernel\KernelInterface;
 use JMS\SerializerBundle\DependencyInjection\Compiler\SetVisitorsPass;
@@ -47,7 +47,7 @@ class JMSSerializerBundle extends Bundle
     public function configureSerializerExtension(JMSSerializerExtension $ext)
     {
         $ext->addHandlerFactory(new ObjectBasedFactory());
-        $ext->addHandlerFactory(new DoctrineOrmProxyFactory());
+        $ext->addHandlerFactory(new DoctrineProxyFactory());
         $ext->addHandlerFactory(new ArrayCollectionFactory());
         $ext->addHandlerFactory(new ConstraintViolationFactory());
         $ext->addHandlerFactory(new DateTimeFactory());
@@ -58,4 +58,4 @@ class JMSSerializerBundle extends Bundle
     {
         $builder->addCompilerPass(new SetVisitorsPass());
     }
-}
+}

+ 2 - 2
Resources/config/services.xml

@@ -37,7 +37,7 @@
         <parameter key="jms_serializer.array_collection_handler.class">JMS\SerializerBundle\Serializer\Handler\ArrayCollectionHandler</parameter>
         <parameter key="jms_serializer.form_error_handler.class">JMS\SerializerBundle\Serializer\Handler\FormErrorHandler</parameter>
         <parameter key="jms_serializer.constraint_violation_handler.class">JMS\SerializerBundle\Serializer\Handler\ConstraintViolationHandler</parameter>
-        <parameter key="jms_serializer.doctrine_orm_handler.class">JMS\SerializerBundle\Serializer\Handler\DoctrineOrmProxyHandler</parameter>
+        <parameter key="jms_serializer.doctrine_handler.class">JMS\SerializerBundle\Serializer\Handler\DoctrineProxyHandler</parameter>
     </parameters>
 
     <services>
@@ -155,6 +155,6 @@
             <argument type="service" id="translator" />
         </service>
         <service id="jms_serializer.constraint_violation_handler" class="%jms_serializer.constraint_violation_handler.class%" public="false" />
-        <service id="jms_serializer.doctrine_orm_handler" class="%jms_serializer.doctrine_orm_handler.class%" public="false" />
+        <service id="jms_serializer.doctrine_handler" class="%jms_serializer.doctrine_handler.class%" public="false" />
     </services>
 </container>

+ 5 - 4
Serializer/Handler/DoctrineOrmProxyHandler.php

@@ -18,15 +18,16 @@
 
 namespace JMS\SerializerBundle\Serializer\Handler;
 
-use Doctrine\ORM\Proxy\Proxy;
+use Doctrine\Common\Persistence\Proxy;
+use Doctrine\ORM\Proxy\Proxy as ORMProxy;
 use JMS\SerializerBundle\Serializer\VisitorInterface;
 use JMS\SerializerBundle\Serializer\Handler\SerializationHandlerInterface;
 
-class DoctrineOrmProxyHandler implements SerializationHandlerInterface
+class DoctrineProxyHandler implements SerializationHandlerInterface
 {
     public function serialize(VisitorInterface $visitor, $data, $type, &$handled)
     {
-        if ($data instanceof Proxy && (!$data->__isInitialized__ || get_class($data) === $type)) {
+        if (($data instanceof Proxy || $data instanceof ORMProxy) && (!$data->__isInitialized__ || get_class($data) === $type)) {
             $handled = true;
 
             if (!$data->__isInitialized__) {
@@ -42,4 +43,4 @@ class DoctrineOrmProxyHandler implements SerializationHandlerInterface
 
         return null;
     }
-}
+}

+ 3 - 3
Tests/Serializer/BaseSerializationTest.php

@@ -41,7 +41,7 @@ use JMS\SerializerBundle\Serializer\Handler\ObjectBasedCustomHandler;
 use JMS\SerializerBundle\Serializer\Handler\DateTimeHandler;
 use JMS\SerializerBundle\Serializer\Handler\FormErrorHandler;
 use JMS\SerializerBundle\Serializer\Handler\ConstraintViolationHandler;
-use JMS\SerializerBundle\Serializer\Handler\DoctrineOrmProxyHandler;
+use JMS\SerializerBundle\Serializer\Handler\DoctrineProxyHandler;
 use JMS\SerializerBundle\Tests\Fixtures\Comment;
 use JMS\SerializerBundle\Tests\Fixtures\Author;
 use JMS\SerializerBundle\Tests\Fixtures\BlogPost;
@@ -333,7 +333,7 @@ abstract class BaseSerializationTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($this->getContent('constraint_violation_list'), $this->serialize($violations));
     }
 
-    public function testDoctrineOrmProxy()
+    public function testDoctrineProxy()
     {
         if (!class_exists('Doctrine\ORM\Version')) {
             $this->markTestSkipped('Doctrine is not available.');
@@ -412,7 +412,7 @@ abstract class BaseSerializationTest extends \PHPUnit_Framework_TestCase
             new DateTimeHandler(),
             new FormErrorHandler($translatorMock),
             new ConstraintViolationHandler(),
-            new DoctrineOrmProxyHandler(),
+            new DoctrineProxyHandler(),
         );
 
         return $handlers;