예제 #1
0
파일: Manager.php 프로젝트: apparat/object
 /**
  * Create and return a new object
  *
  * @param RepositoryInterface $repository Repository to create the object in
  * @param Type $type Object type
  * @param string $payload Object payload
  * @param array $propertyData Object property data
  * @param \DateTimeInterface $creationDate Object creation date
  * @return ObjectInterface Object
  */
 public function createObject(RepositoryInterface $repository, Type $type, $payload = '', array $propertyData = [], \DateTimeInterface $creationDate = null)
 {
     // Set the creation date to now if empty
     if ($creationDate === null) {
         $creationDate = new \DateTimeImmutable('now');
     }
     // Construct a creation closure
     $creationClosure = function (Id $uid) use($repository, $type, $payload, $propertyData, $creationDate) {
         /** @var Revision $revision */
         $revision = Kernel::create(Revision::class, [1, true]);
         /** @var RepositoryLocator $repositoryLocator */
         $repositoryLocator = Kernel::create(RepositoryLocator::class, [$repository]);
         $repositoryLocator = $repositoryLocator->setId($uid);
         $repositoryLocator = $repositoryLocator->setRevision($revision);
         $repositoryLocator = $repositoryLocator->setObjectType($type);
         $repositoryLocator = $repositoryLocator->setCreationDate($creationDate);
         return ObjectFactory::createFromParams($repositoryLocator, $payload, $propertyData);
     };
     // Wrap the object creation in an ID allocation transaction
     return $repository->getAdapterStrategy()->createObjectResource($creationClosure);
 }