/** * @param array $mappedClass * @param Mapping $mapping * @param string $className * * @throws MappingException */ protected static function setAliasedProperties(array &$mappedClass, Mapping $mapping, string $className) { if (false === empty($mappedClass[static::ALIASED_PROPERTIES_KEY])) { $mapping->setPropertyNameAliases($mappedClass[static::ALIASED_PROPERTIES_KEY]); foreach (\array_keys($mapping->getAliasedProperties()) as $propertyName) { if (false === \in_array($propertyName, static::getClassProperties($className), true)) { throw new MappingException(\sprintf('Could not alias property %s in class %s because it does not exist.', $propertyName, $className)); } } } }
/** * */ public function testItWillRenamePropertiesFromClass() { $post = HelperFactory::simplePost(); $postMapping = new Mapping(SimplePost::class, '/post/{postId}', ['postId']); $postMapping->setPropertyNameAliases(['title' => 'headline', 'body' => 'post', 'postId' => 'someId']); $mapper = new Mapper(); $mapper->setClassMap([$postMapping->getClassName() => $postMapping]); $jsonApiJsonApiSerializer = new JsonApiTransformer($mapper); $expected = <<<JSON { "data": { "type": "post", "id": "1", "attributes": { "some_id": 1, "headline": "post title", "post": "post body", "author_id": 2, "comments": [ { "comment_id": 10, "comment": "I am writing comment no. 1", "user_id": "User 5", "created_at": "2015-07-19T12:48:00+02:00" }, { "comment_id": 20, "comment": "I am writing comment no. 2", "user_id": "User 10", "created_at": "2015-07-20T12:48:00+02:00" }, { "comment_id": 30, "comment": "I am writing comment no. 3", "user_id": "User 15", "created_at": "2015-07-21T12:48:00+02:00" }, { "comment_id": 40, "comment": "I am writing comment no. 4", "user_id": "User 20", "created_at": "2015-07-22T12:48:00+02:00" }, { "comment_id": 50, "comment": "I am writing comment no. 5", "user_id": "User 25", "created_at": "2015-07-23T12:48:00+02:00" } ] }, "links": { "self": { "href": "/post/1" } } }, "links": { "self": { "href": "/post/1" } }, "jsonapi": { "version": "1.0" } } JSON; $this->assertEquals(\json_decode($expected, true), \json_decode((new JsonApiSerializer($jsonApiJsonApiSerializer))->serialize($post), true)); }
/** * @param \NilPortugues\Api\Mapping\Mapping $mapping * * @link http://jsonapi.org/format/#document-member-names-allowed-characters */ protected function buildValidPropertyAlias($mapping) { $aliases = $mapping->getAliasedProperties(); foreach ($aliases as &$alias) { $alias = DataAttributesHelper::transformToValidMemberName($alias); } $mapping->setPropertyNameAliases($aliases); }
public function testAliasedPropertiesRenamedIdProperties() { $this->mapping->setPropertyNameAliases(['postId' => 'newId']); $this->assertEquals(['postId' => 'newId'], $this->mapping->getAliasedProperties()); $this->assertEquals(['newId'], $this->mapping->getIdProperties()); }