for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/**
* File was created 30.09.2015 07:46
*/
namespace PeekAndPoke\Component\Slumber\Core\Codec\Property;
use PeekAndPoke\Component\Slumber\Annotation\Slumber\AsObject;
use PeekAndPoke\Component\Slumber\Core\Codec\Awaker;
use PeekAndPoke\Component\Slumber\Core\Codec\Slumberer;
use PeekAndPoke\Types\ValueHolder;
* @author Karsten J. Gerber <[email protected]>
class ObjectMapper extends AbstractPropertyMapper
{
/** @var AsObject */
private $options;
* C'tor.
*
* @param AsObject $options
public function __construct(AsObject $options)
$this->options = $options;
}
* @return AsObject
public function getOptions()
return $this->options;
* @param Slumberer $slumberer
* @param mixed $value
* @return mixed
public function slumber(Slumberer $slumberer, $value)
* unwrap any wrappers like LazyDbReference
* @see LazyDbReference
if ($value instanceof ValueHolder) {
// TODO: Rethink this! Is this really a good idea or should it only happen in the Mongo ObjectMapper and only for LazyDbReference ?
// This might trigger in cases where it is not really wanted.
$value = $value->getValue();
if ($value instanceof $this->options->value) {
return $slumberer->slumber($value);
return null;
* @param Awaker $awaker
public function awake(Awaker $awaker, $value)
if ($value === null || (! \is_array($value) && ! $value instanceof \ArrayAccess)) {
$cls = new \ReflectionClass($this->options->value);
return $awaker->awake($value, $cls);