Repository abandoned 2019-12-31
This repository has moved to alexpts/php-data-transformer2., (*1)
, (*2)
, (*3)
ΠΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ - https://github.com/alexpts/php-data-transformer2, (*4)
ΠΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² ΡΠ°Π·Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Π ΠΊΠΎΠ΄Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ. ΠΠΎ Π΄Π»Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΠΈΠ΄, ΠΎΠ±ΡΡΠ½ΠΎ Π² Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠΎΡΡΡΠ΅ DTO ΡΡΡΠ½ΠΎΡΡΠΈ., (*5)
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ., (*6)
ΠΡΡ ΡΡ
Π΅ΠΌΠ° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΈ Π²Π½Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠΎΠ·Π²ΠΎΠ»ΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΡ
Π΅ΠΌΡ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»Π΅ ΡΠΈΠΏΠ° DateTime
ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡ
ΡΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π² mongoDB ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° MongoDate
ΠΈΠ»ΠΈ UTCDateTime
. ΠΠ΅ΡΠ΅Π΄ ΠΎΡΠ΄Π°ΡΠ΅ΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΡΡΠΎΠΊΡ ISO8601. ΠΠ΅ΡΠ΅Π΄ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π² redis ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² timestamp
., (*7)
ΠΠ°Π½Π½ΡΠ΅ ΠΏΡΠΈΡΠ»Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΎΡΠΌΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΡΡΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
, Π±ΡΠ΄Ρ ΡΠΎ ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ true/false
. Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ΅Ρ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π² ΠΌΠΎΠ΄Π΅Π»Π΅ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½Ρ Π² ΡΠΈΠΏ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ., (*8)
Installation
$ composer require alexpts/php-data-transformer
, (*9)
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
PHP 7.0+, (*10)
ΠΠΎΠ΄Π΅Π»ΠΈ
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΎΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π²Π°ΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΠΈΡΡΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ., (*11)
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ΅ΡΡ
ΠΡΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π½Π½ΡΠΉ ΡΠΈΠΏ Π² ΠΊΠ°ΡΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ°ΡΡΠ° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ yml ΡΠ°ΠΉΠ» Π²ΠΈΠ΄Π°:, (*12)
id:
type: int
get: getId
login:
type: string
get: getLogin
set: setLogin
name:
type: string
prop: name
active:
type: bool
prop: active
creAt:
type: date
get: getCreAt
email:
type: string
prop: email
postsIds:
type: int
coll: true
roles:
type: refModels
prop: roles
rel:
model: \\SomeNamespace\\Role
map: dto
ΠΠ΄Π΅ ΠΊΠ»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°., (*13)
type
- ΡΠΈΠΏ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ΅ΡΠ°, (*14)
coll
- [optional] true|false ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ, (*15)
prop
- [optional] ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ, (*16)
get
- [optional] ΠΌΠ΅ΡΠΎΠ΄ Π³Π΅ΡΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ (prop
ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ), (*17)
set
- [optional] ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ (prop
ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ), (*18)
rel
- [optional] ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ, (*19)
rel.model
- [optional] ΠΏΠΎΠ»Π½ΡΠΉ ΡΡΡ ΠΎΠΊΠΎΠ²ΡΠΉ ΠΏΡΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, (*20)
rel.map
- [optional] ΠΈΠΌΡ ΠΊΠ°ΡΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ [ΡΠΌΠΎΠ»Ρ.: 'dto'], (*21)
ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠ°ΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΠ»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ setMapDir
ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° MapsManager
.
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - ΠΊΠ»Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΎΡΠΎΠΉ - Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠ°ΡΡΠ°ΠΌΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ., (*22)
$mapsManager = new MapsManager(new Parser);
$mapsManager = setMapDir(UserModel::class, __DIR__ . '/transformers');
Model to DTO
$transformer = new DataTransformer(
new TypeConverter,
$mapsManager,
new ModelClosure
);
ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π² ΠΌΠ΅ΡΠΎΠ΄ getData
ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΎΡΠ°. ΠΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠΌΡ ΠΊΠ°ΡΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ dto
)., (*23)
$user = new User('name', 'login', 'email@gmail.com');
$dtoUser = $transformer->getData($user, 'dto');
ΠΡΡΡ ΡΠ°ΠΉΠ»Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄:, (*24)
__DIR__ . '/transformers/dto.yml'
., (*25)
Data to model
Π§Π΅ΡΠ΅Π· ΡΡΡ ΠΆΠ΅ ΠΊΠ°ΡΡΡ ΡΡΠ°Π½ΡΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΠΌΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ Π½Π°Π·Π°Π΄ Π² ΠΌΠΎΠ΄Π΅Π»Ρ., (*26)
$data = [
'name' => 'name',
'login' => 'login',
'email' => 'email@gmail.com'
];
$model = $transformer->createModel(User::class);
$transformer->fillModel($data, $model, 'dto');
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ
ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΊΠΎΠ»Π΅Π»ΠΊΡΠΈΠ΅ΠΉ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ³Π½Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΏ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠΎΠ»Ρ Π² ΠΊΠ°ΡΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ»Π°Π³ coll: true
. Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΠΏΠΈΡΠ°Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ ΡΠ΅ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ., (*27)
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΠΏΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΡΠ»ΡΠΆΠΈΡ ΡΠΈΠΏ refModels
. ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ., (*28)
ΠΠ°ΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΠ»ΠΈ Ρ
ΡΠ°Π½ΠΈΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ°Π·ΡΠΌΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π΅ id. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏ refModelsToArrayStringId
. ΠΡΠ»ΠΈ id ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ MongoId
ΠΈΠ»ΠΈ ObjectId
), ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΈΠΏ., (*29)
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΈΠΏ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ toData
ΠΈ toModel
. ΠΠΎΠ²ΡΠΉ ΡΠΈΠΏ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° TypeConverter
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ addType($name, $type)
. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ, Π·Π°ΠΌΠ΅ΡΡΠΈΠ² ΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ., (*30)
ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° TypeConverter ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΡΠΊΡΠΎΡΠ΅ Π²ΡΠ΅ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΈΠΏΡ Π²ΡΡΡΠ½ΡΡ., (*31)