Download the PHP package shipmonk/input-mapper without Composer
On this page you can find all versions of the php package shipmonk/input-mapper. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download shipmonk/input-mapper
More information about shipmonk/input-mapper
Files in shipmonk/input-mapper
Package input-mapper
Short Description Performant array-to-object mapper supporting generics, array shapes, optional fields and much more!
License MIT
Informations about the package input-mapper
ShipMonk Input Mapper
High performance input mapper for PHP with support for generics, array shapes and nullable types. For each input class, a mapper is generated at runtime and cached on disk. The mapper is generated only once and then reused on subsequent requests. The generated mapper is highly optimized for performance and it is designed to be human readable. You can see example of generated mappers in the tests directory.
Installation:
Features
Built-in mappers
Input Mapper comes with built-in mappers for the following types:
array
,bool
,float
,int
,mixed
,string
,list
positive-int
,negative-int
,int<TMin, TMax>
,non-empty-list
array<V>
,array<K, V>
,list<V>
,non-empty-list<V>
array{K1: V1, ...}
?T
,Optional<T>
DateTimeInterface
,DateTimeImmutable
BackedEnum
- and most importantly classes with public constructor
You can write your own mappers or replace the default mappers with your own.
Built-in validators
Input Mapper comes with some built-in validators:
- int validators:
AssertInt16
AssertInt32
AssertIntRange
AssertPositiveInt
AssertNegativeInt
AssertNonNegativeInt
AssertNonPositiveInt
AssertIntMultipleOf
- float validators:
AssertFloatRange
AssertPositiveFloat
AssertNegativeFloat
AssertNonNegativeFloat
AssertNonPositiveFloat
AssertFloatMultipleOf
- string validators:
AssertStringLength
AssertStringMatches
AssertUrl
- list validators:
AssertListItem
AssertListLength
AssertUniqueItems
(compares items by===
)
- date time validators:
AssertDateTimeRange
You can write your own validators if you need more.
Usage:
Write Input Class
To use Input Mapper, write a class with a public constructor and add either native or PHPDoc types to all constructor parameters.
Optional fields can either be marked with #[Optional]
attribute (allowing you to specify a default value),
or if you need to distinguish between default and missing values, you can wrap the type with ShipMonk\InputMapper\Runtime\Optional
class.
By default, any extra properties are not allowed. You can change that by adding #[AllowExtraKeys]
over the class.
Map Input
To map input, provide a path to a writable directory where generated mappers will be stored.
It's important to set $autoRefresh to false in production to avoid recompiling mappers on every request.
Adding Validation Rules
You can add validation rules by adding attributes to constructor parameters.
For example, to validate that age
is between 18 and 99, you can add the AssertIntRange
attribute to the constructor parameter:
Renaming keys
If the input keys do not match the property names, you can use the #[SourceKey]
attribute to specify the key name:
Parsing polymorphic classes (subtypes with a common parent)
If you need to parse a hierarchy of classes, you can use the #[Discriminator]
attribute.
(The discriminator field does not need to be mapped to a property if #[AllowExtraKeys]
is used.)
or, with enum:
Using custom mappers
To map classes with your custom mapper, you need to implement ShipMonk\InputMapper\Runtime\Mapper
interface and register it with MapperProvider
:
Customizing default mappers inferred from types
To customize how default mappers are inferred from types, you need to implement
ShipMonk\InputMapper\Compiler\MapperFactory\MapperCompilerFactory
andShipMonk\InputMapper\Compiler\MapperFactory\MapperCompilerFactoryProvider
.
Then register your factory provider with MapperProvider
:
Contributing
- Check your code by
composer check
- Autofix coding-style by
composer fix:cs
- All functionality must be tested
All versions of input-mapper with dependencies
nette/utils Version ^3.2 || ^4.0
nikic/php-parser Version ^5.0
phpstan/phpdoc-parser Version ^2.0.0