mapper.php

Basically a serialization wrapper for netresearch/jsonmapper
git clone git://git.finwo.net/lib/mapper.php
Log | Files | Refs | README

Mapper.php (1457B)


      1 <?php
      2 
      3 namespace Finwo\Mapper;
      4 
      5 use Finwo\Mapper\Driver\JsonDriver;
      6 use Finwo\Mapper\Driver\UrlEncodedDriver;
      7 
      8 class Mapper
      9 {
     10     /**
     11      * @return DriverHandler
     12      */
     13     protected static function getDriverHandler()
     14     {
     15         static $dh = null;
     16         if (is_null($dh)) {
     17             // Build driver handler & register included drivers
     18             $dh = new DriverHandler();
     19             $dh->registerDriver('json', new JsonDriver())
     20                 ->registerDriver('urlencoded', new UrlEncodedDriver());
     21         }
     22 
     23         return $dh;
     24     }
     25 
     26     /**
     27      * @param object|array|string $objectOrString
     28      * @param object|array        $targetObject
     29      *
     30      * @return $this
     31      */
     32     public function map($objectOrString, $targetObject = array())
     33     {
     34         // Initialize json-mapper
     35         static $mapper = null;
     36         if (is_null($mapper)) {
     37             $mapper = new \JsonMapper();
     38         }
     39 
     40         // Make the data usable
     41         /** @var object|array $data */
     42         $data = $this->getDriverHandler()->deserialize($objectOrString);
     43 
     44         // Map into target
     45         if (is_array($data)) {
     46             $class = is_object($targetObject) ? get_class($targetObject) : is_array($targetObject) ? null : "$targetObject";
     47             return $mapper->mapArray($data, array(), $class);
     48         } else {
     49             $mapper->map($data, $targetObject);
     50         }
     51 
     52         // Bail before things get complicated
     53         return $this;
     54     }
     55 }