Skip to content

Instantly share code, notes, and snippets.

@sasezaki
Last active August 29, 2015 14:20
Show Gist options
  • Save sasezaki/63a7a47edcc0f87103b5 to your computer and use it in GitHub Desktop.
Save sasezaki/63a7a47edcc0f87103b5 to your computer and use it in GitHub Desktop.
<?php
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\EventManager;
use Doctrine\SkeletonMapper\DataRepository\ArrayObjectDataRepository;
use Doctrine\SkeletonMapper\Hydrator\BasicObjectHydrator;
use Doctrine\SkeletonMapper\Mapping\ClassMetadata;
use Doctrine\SkeletonMapper\Mapping\ClassMetadataFactory;
use Doctrine\SkeletonMapper\ObjectFactory;
use Doctrine\SkeletonMapper\ObjectIdentityMap;
use Doctrine\SkeletonMapper\ObjectManager;
use Doctrine\SkeletonMapper\ObjectRepository\BasicObjectRepository;
use Doctrine\SkeletonMapper\Persister\ArrayObjectPersister;
use Doctrine\SkeletonMapper\Persister\ObjectPersisterFactory;
use Doctrine\SkeletonMapper\ObjectRepository\ObjectRepositoryFactory;
use Doctrine\SkeletonMapper\Hydrator\ObjectHydratorInterface;
$loader = require_once __DIR__.'/vendor/autoload.php';
$loader->add('Model\\', __DIR__);
class MyHydrator implements ObjectHydratorInterface
{
protected $objectManager;
public function __construct($objectManager)
{
$this->objectManager = $objectManager;
}
public function hydrate($object, array $data)
{
$metadata = $this->objectManager->getClassMetadata(get_class($object));
$mappings = $metadata->getFieldMappings();
foreach ($mappings as $map) {
$object->{$map['fieldName']} = $data[$map['name']];
}
}
}
$eventManager = new EventManager();
$classMetadataFactory = new ClassMetadataFactory();
$objectFactory = new ObjectFactory();
$objectRepositoryFactory = new ObjectRepositoryFactory();
$objectPersisterFactory = new ObjectPersisterFactory();
$objectIdentityMap = new ObjectIdentityMap(
$objectRepositoryFactory,
$classMetadataFactory
);
$userClassMetadata = new ClassMetadata('Model\User');
$userClassMetadata->identifier = array('_id');
$userClassMetadata->identifierFieldNames = array('id');
$userClassMetadata->mapField(array(
'name' => '_id',
'fieldName' => 'id',
));
$userClassMetadata->mapField(array(
'fieldName' => 'username',
));
$userClassMetadata->mapField(array(
'fieldName' => 'password',
));
$classMetadataFactory->setMetadataFor('Model\User', $userClassMetadata);
$objectManager = new ObjectManager(
$objectRepositoryFactory,
$objectPersisterFactory,
$objectIdentityMap,
$classMetadataFactory,
$eventManager
);
$users = new ArrayCollection(array(
1 => array(
'_id' => 1,
'username' => 'jwage',
'password' => 'password',
),
2 => array(
'_id' => 2,
'username' => 'romanb',
'password' => 'password',
),
));
$userDataRepository = new ArrayObjectDataRepository(
$objectManager, $users, 'Model\User'
);
$userHydrator = new MyHydrator($objectManager);
$userRepository = new BasicObjectRepository(
$objectManager,
$userDataRepository,
$objectFactory,
$userHydrator,
$eventManager,
'Model\User'
);
$userPersister = new ArrayObjectPersister(
$objectManager, $users, 'Model\User'
);
$objectRepositoryFactory->addObjectRepository('Model\User', $userRepository);
$objectPersisterFactory->addObjectPersister('Model\User', $userPersister);
//var_dump($userDataRepository->find(1));
var_dump($userRepository->find(1));
// object(Model\User)#25 (3) {
// ["id"]=>
// int(1)
// ["username"]=>
// string(5) "jwage"
// ["password"]=>
// string(8) "password"
//}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment