Skip to content

ThrusterIO/data-mapper

Repository files navigation

DataMapper Component

[Latest Version] (https://github.com/ThrusterIO/data-mapper/releases) [Software License] (LICENSE) [Build Status] (https://travis-ci.org/ThrusterIO/data-mapper) [Code Coverage] (https://scrutinizer-ci.com/g/ThrusterIO/data-mapper) [Quality Score] (https://scrutinizer-ci.com/g/ThrusterIO/data-mapper) [Total Downloads] (https://packagist.org/packages/thruster/data-mapper)

[Email] (mailto:team@thruster.io)

The Thruster DataMapper Component. Provides fast and efficient way to map data from one format to another.

Install

Via Composer

$ composer require thruster/data-mapper

For PHP < 7.0

For older PHP version than PHP7 there is branch php5

$ composer require thruster/data-mapper ">=1.0,<2.0"

Usage

Simple Data Mapping

class SimpleMapper extends BaseDataMapper {
    /**
     * @param Request $input
     */
    public function map($input)
    {
        return [
            'id' => $input->getId(),
            'name' => $input->getName()
        ];
    }
}

$dataMappers = new DataMappers();
$dataMappers->addMapper(new SimpleMapper());
$dataMappers->getMapper(SimpleMapper::class)->map($input);

Nested Data Mapping

class ItemMapper extends BaseDataMapper {
    /**
     * @param Request $input
     */
    public function map($input)
    {
        return [
            'id' => $input->getId(),
            'name' => $input->getName()
        ];
    }
}

class MainMapper extends BaseDataMapper {
    /**
     * @param Request $input
     */
    public function map($input)
    {
        return [
            'id' => $input->getId(),
            'name' => $input->getName(),
            'items' => $this->getMapper(ItemMapper::class)->mapCollection($input->getItems())
        ];
    }
}

$dataMappers = new DataMappers();
$dataMappers->addMapper(new MainMapper());
$dataMappers->addMapper(new ItemMapper());
$dataMappers->getMapper(MainMapper::class)->map($input);

Validateable Data Mapping

class UserRegistrationMapper extends BaseDataMapper implements ValidateableDataMapperInterface {
    /**
     * @param Request $input
     */
    public function map($input)
    {
        $user = new User();
        
        $user->setUsername($input->get('username'));
        $user->setPassword($input->get('password'));
    }

    public function supports($input) : bool
    {
        return ($input instanceof Request);
    }
    
    public function getValidationGroups($input) : array
    {
        return ['full'];
    }
}

$dataMappers = new DataMappers();
$dataMappers->setValidator(Validation::createValidator());

$dataMappers->addMapper(new UserRegistrationMapper());
$dataMappers->getMapper(UserRegistrationMapper::class)->map($input);

Standalone Data Mapping

$simpleMapper = new DataMapper(
    new class extends BaseDataMapper {
        /**
         * @param Request $input
         */
        public function map($input)
        {
            return [
                'id' => $input->getId(),
                'name' => $input->getName()
            ];
        }
    
        public function supports($input) : bool
        {
            return true;
        }
    }
);

$simpleMapper->map($input);

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for details.

License

Please see License File for more information.

About

Thruster DataMapper Component

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages