/** * @param array[] $value * @param PropRule $propRule * @param DataTransformer $transformer * @return mixed[] * * @throws ParseException */ public function toModel(array $value, PropRule $propRule, DataTransformer $transformer) { $type = $propRule->getKey('rel')['map']; $emptyModel = $transformer->createModel($propRule->getKey('rel')['model']); $models = []; foreach ($value as $one) { $model = clone $emptyModel; $transformer->fillModel($one, $model, $type); $models[] = $model; } return $models; }
public function testFillModel() { $data = ['name' => 'name', 'login' => 'login', 'creAt' => new \DateTime(), 'active' => false, 'email' => '', 'someField' => 'someValue']; $this->transformer->getMapsManager()->setMapDir(UserModel::class, __DIR__ . '/data'); /** @var UserModel $model */ $model = $this->transformer->createModel(UserModel::class); $this->transformer->fillModel($data, $model, 'dto'); self::assertInstanceOf('DateTime', $model->getCreAt()); self::assertEquals($data['creAt']->getTimestamp(), $model->getCreAt()->getTimestamp()); self::assertEquals($data['email'], $model->getEmail()); self::assertEquals($data['name'], $model->getName()); self::assertEquals($data['login'], $model->getLogin()); self::assertEquals($data['active'], $model->isActive()); }
use PTS\DataTransformer\TypeConverter; use PTS\DataTransformer\Types\ArrayType; use PTS\DataTransformer\Types\BaseType; use PTS\DataTransformer\Types\BoolType; use PTS\DataTransformer\Types\DateType; use PTS\DataTransformer\Types\FloatType; use PTS\DataTransformer\Types\IntType; use PTS\DataTransformer\Types\RefModelsToArrayStringIdType; use PTS\DataTransformer\Types\RefModelsType; use PTS\DataTransformer\Types\RefModelType; use PTS\DataTransformer\Types\StringType; use Symfony\Component\Yaml\Parser; include_once __DIR__ . '/../../vendor/autoload.php'; include_once __DIR__ . '/../models/Post/Post.php'; include_once __DIR__ . '/../models/Tag/Tag.php'; $transformer = new DataTransformer(new TypeConverter(), new MapsManager(new Parser()), new ModelClosure()); $converter = $transformer->getConverter(); $converter->addType('proxy', new BaseType()); $converter->addType('int', new IntType()); $converter->addType('string', new StringType()); $converter->addType('array', new ArrayType()); $converter->addType('date', new DateType()); $converter->addType('float', new FloatType()); $converter->addType('bool', new BoolType()); $converter->addType('refModelsToArrayStringId', new RefModelsToArrayStringIdType()); $converter->addType('refModels', new RefModelsType()); $converter->addType('refModel', new RefModelType()); $transformer->getMapsManager()->setMapDir(Tag::class, __DIR__ . '/../models/Tag/'); $transformer->getMapsManager()->setMapDir(Post::class, __DIR__ . '/../models/Post/'); $tag1 = (new Tag())->setId(1)->setTitle('music'); $tag2 = (new Tag())->setId(2)->setTitle('js');
/** * @expectedException \PTS\DataTransformer\TypeException */ public function testBadType() { $converter = $this->transformer->getConverter(); $converter->addType('badType', new BadType()); }