114 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Zend Framework (http://framework.zend.com/)
 | |
|  *
 | |
|  * @link      http://github.com/zendframework/zf2 for the canonical source repository
 | |
|  * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license   http://framework.zend.com/license/new-bsd New BSD License
 | |
|  */
 | |
| 
 | |
| namespace Zend\Hydrator\Strategy;
 | |
| 
 | |
| class ClosureStrategy implements StrategyInterface
 | |
| {
 | |
|     /**
 | |
|      * Function, used in extract method, default:
 | |
|      *
 | |
|      * <code>
 | |
|      * function ($value) {
 | |
|      *     return $value;
 | |
|      * };
 | |
|      * </code>
 | |
|      *
 | |
|      * @var callable
 | |
|      */
 | |
|     protected $extractFunc = null;
 | |
| 
 | |
|     /**
 | |
|      * Function, used in hydrate method, default:
 | |
|      *
 | |
|      * <code>
 | |
|      * function ($value) {
 | |
|      *     return $value;
 | |
|      * };
 | |
|      * </code>
 | |
|      *
 | |
|      * @var callable
 | |
|      */
 | |
|     protected $hydrateFunc = null;
 | |
| 
 | |
|     /**
 | |
|      * You can describe how your values will extract and hydrate, like this:
 | |
|      *
 | |
|      * <code>
 | |
|      * $hydrator->addStrategy('category', new ClosureStrategy(
 | |
|      *     function (Category $value) {
 | |
|      *         return (int) $value->id;
 | |
|      *     },
 | |
|      *     function ($value) {
 | |
|      *         return new Category((int) $value);
 | |
|      *     }
 | |
|      * ));
 | |
|      * </code>
 | |
|      *
 | |
|      * @param callable $extractFunc - anonymous function, that extract values
 | |
|      *     from object
 | |
|      * @param callable $hydrateFunc - anonymous function, that hydrate values
 | |
|      *     into object
 | |
|      */
 | |
|     public function __construct($extractFunc = null, $hydrateFunc = null)
 | |
|     {
 | |
|         if (isset($extractFunc)) {
 | |
|             if (!is_callable($extractFunc)) {
 | |
|                 throw new \Exception('$extractFunc must be callable');
 | |
|             }
 | |
| 
 | |
|             $this->extractFunc = $extractFunc;
 | |
|         } else {
 | |
|             $this->extractFunc = function ($value) {
 | |
|                 return $value;
 | |
|             };
 | |
|         }
 | |
| 
 | |
|         if (isset($hydrateFunc)) {
 | |
|             if (!is_callable($hydrateFunc)) {
 | |
|                 throw new \Exception('$hydrateFunc must be callable');
 | |
|             }
 | |
| 
 | |
|             $this->hydrateFunc = $hydrateFunc;
 | |
|         } else {
 | |
|             $this->hydrateFunc = function ($value) {
 | |
|                 return $value;
 | |
|             };
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Converts the given value so that it can be extracted by the hydrator.
 | |
|      *
 | |
|      * @param  mixed $value  The original value.
 | |
|      * @param  array $object The object is optionally provided as context.
 | |
|      * @return mixed Returns the value that should be extracted.
 | |
|      */
 | |
|     public function extract($value, $object = null)
 | |
|     {
 | |
|         $func = $this->extractFunc;
 | |
| 
 | |
|         return $func($value, $object);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Converts the given value so that it can be hydrated by the hydrator.
 | |
|      *
 | |
|      * @param  mixed $value The original value.
 | |
|      * @param  array $data  The whole data is optionally provided as context.
 | |
|      * @return mixed Returns the value that should be hydrated.
 | |
|      */
 | |
|     public function hydrate($value, $data = null)
 | |
|     {
 | |
|         $func = $this->hydrateFunc;
 | |
| 
 | |
|         return $func($value, $data);
 | |
|     }
 | |
| }
 | 
