vendor/symfony/http-kernel/DataCollector/DataCollector.php line 62

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpKernel\DataCollector;
  11. use Symfony\Component\VarDumper\Caster\CutStub;
  12. use Symfony\Component\VarDumper\Caster\ReflectionCaster;
  13. use Symfony\Component\VarDumper\Cloner\ClonerInterface;
  14. use Symfony\Component\VarDumper\Cloner\Data;
  15. use Symfony\Component\VarDumper\Cloner\Stub;
  16. use Symfony\Component\VarDumper\Cloner\VarCloner;
  17. /**
  18.  * DataCollector.
  19.  *
  20.  * Children of this class must store the collected data in the data property.
  21.  *
  22.  * @author Fabien Potencier <fabien@symfony.com>
  23.  * @author Bernhard Schussek <bschussek@symfony.com>
  24.  */
  25. abstract class DataCollector implements DataCollectorInterface
  26. {
  27.     /**
  28.      * @var array|Data
  29.      */
  30.     protected $data = [];
  31.     /**
  32.      * @var ClonerInterface
  33.      */
  34.     private $cloner;
  35.     /**
  36.      * Converts the variable into a serializable Data instance.
  37.      *
  38.      * This array can be displayed in the template using
  39.      * the VarDumper component.
  40.      *
  41.      * @param mixed $var
  42.      *
  43.      * @return Data
  44.      */
  45.     protected function cloneVar($var)
  46.     {
  47.         if ($var instanceof Data) {
  48.             return $var;
  49.         }
  50.         if (null === $this->cloner) {
  51.             $this->cloner = new VarCloner();
  52.             $this->cloner->setMaxItems(-1);
  53.             $this->cloner->addCasters($this->getCasters());
  54.         }
  55.         return $this->cloner->cloneVar($var);
  56.     }
  57.     /**
  58.      * @return callable[] The casters to add to the cloner
  59.      */
  60.     protected function getCasters()
  61.     {
  62.         $casters = [
  63.             '*' => function ($v, array $aStub $s$isNested) {
  64.                 if (!$v instanceof Stub) {
  65.                     $b $a;
  66.                     foreach ($a as $k => $v) {
  67.                         if (!\is_object($v) || $v instanceof \DateTimeInterface || $v instanceof Stub) {
  68.                             continue;
  69.                         }
  70.                         try {
  71.                             $a[$k] = $s = new CutStub($v);
  72.                             if ($b[$k] === $s) {
  73.                                 // we've hit a non-typed reference
  74.                                 $a[$k] = $v;
  75.                             }
  76.                         } catch (\TypeError $e) {
  77.                             // we've hit a typed reference
  78.                         }
  79.                     }
  80.                 }
  81.                 return $a;
  82.             },
  83.         ] + ReflectionCaster::UNSET_CLOSURE_FILE_INFO;
  84.         return $casters;
  85.     }
  86.     /**
  87.      * @return array
  88.      */
  89.     public function __sleep()
  90.     {
  91.         return ['data'];
  92.     }
  93.     public function __wakeup()
  94.     {
  95.     }
  96.     /**
  97.      * @internal to prevent implementing \Serializable
  98.      */
  99.     final protected function serialize()
  100.     {
  101.     }
  102.     /**
  103.      * @internal to prevent implementing \Serializable
  104.      */
  105.     final protected function unserialize($data)
  106.     {
  107.     }
  108. }