From c426d8bc091869e7575ff1c5822010af8d368c08 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 5 Apr 2014 21:01:17 +0200 Subject: [PATCH] [VarDumper] casters for Doctrine objects --- .../VarDumper/Caster/DoctrineCaster.php | 73 +++++++++++++++++++ .../VarDumper/Cloner/AbstractCloner.php | 5 ++ 2 files changed, 78 insertions(+) create mode 100644 src/Symfony/Component/VarDumper/Caster/DoctrineCaster.php diff --git a/src/Symfony/Component/VarDumper/Caster/DoctrineCaster.php b/src/Symfony/Component/VarDumper/Caster/DoctrineCaster.php new file mode 100644 index 0000000000..49e1b7bbed --- /dev/null +++ b/src/Symfony/Component/VarDumper/Caster/DoctrineCaster.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\Common\Proxy\Proxy as CommonProxy; +use Doctrine\ORM\Proxy\Proxy as OrmProxy; +use Doctrine\ORM\PersistentCollection; + +/** + * Casts Doctrine related classes to array representation. + * + * @author Nicolas Grekas + */ +class DoctrineCaster +{ + public static function castCommonProxy(CommonProxy $proxy, array $a, $isNested, &$cut) + { + unset( + $a['__cloner__'], + $a['__initializer__'] + ); + $cut += 2; + + return $a; + } + + public static function castOrmProxy(OrmProxy $proxy, array $a, $isNested, &$cut) + { + $prefix = "\0Doctrine\\ORM\\Proxy\\Proxy\0"; + unset( + $a[$prefix.'_entityPersister'], + $a[$prefix.'_identifier'] + ); + $cut += 2; + + return $a; + } + + public static function castObjectManager(ObjectManager $manager, array $a, $isNested, &$cut) + { + if ($isNested) { + $cut += count($a); + + return array(); + } + + return $a; + } + + public static function castPersistentCollection(PersistentCollection $coll, array $a, $isNested, &$cut) + { + $prefix = "\0Doctrine\\ORM\\PersistentCollection\0"; + unset( + $a[$prefix.'snapshot'], + $a[$prefix.'association'], + $a[$prefix.'em'], + $a[$prefix.'typeClass'] + ); + $cut += 4; + + return $a; + } +} diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php index 01cfd7f763..f61cde388b 100644 --- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php @@ -24,6 +24,11 @@ abstract class AbstractCloner implements ClonerInterface 'o:Closure' => 'Symfony\Component\VarDumper\Caster\ReflectionCaster::castClosure', 'o:Reflector' => 'Symfony\Component\VarDumper\Caster\ReflectionCaster::castReflector', + 'o:Doctrine\Common\Persistence\ObjectManager' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castObjectManager', + 'o:Doctrine\Common\Proxy\Proxy' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castCommonProxy', + 'o:Doctrine\ORM\Proxy\Proxy' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castOrmProxy', + 'o:Doctrine\ORM\PersistentCollection' => 'Symfony\Component\VarDumper\Caster\DoctrineCaster::castPersistentCollection', + 'o:ErrorException' => 'Symfony\Component\VarDumper\Caster\ExceptionCaster::castErrorException', 'o:Exception' => 'Symfony\Component\VarDumper\Caster\ExceptionCaster::castException', 'o:Symfony\Component\VarDumper\Exception\ThrowingCasterException'