, (*1)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
Π² ΠΌΠ°ΡΡΠΈΠ²Ρ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡ
Π΅ΠΌΡ (Transformer)., (*2)
Install
composer require itmedia/data-transformer
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ΅ΡΡ:
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ ΠΎΡ Itmedia\DataTransformer\Transformer\Transformer
ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ map($resource):, (*3)
ΠΠΎΠΆΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ ΠΊΠ°ΡΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²., (*4)
class UserTransformer extends Transformer
{
public function map($resource)
{
return [
'name' => $resource['user_name'],
'email' => $resource['user_email']
];
}
}
class GroupTransformer extends Transformer
{
public function map($resource)
{
return [
'id' => $resource['group_id'],
'name' => $resource['group_name']
];
}
}
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
:
$resource = [
'user_name' => 'Tester',
'user_email' => 'email@email.com',
'password' => 'mypass',
'user_group' => [
[
'group_id' => 1,
'group_name' => 'User'
],
[
'group_id' => 2,
'group_name' => 'Manager'
]
]
];
$transformer = new UserTransformer();
$transformer->addCollection(new GroupTransformer('user_group', ['field' => 'groups']));
$transformProvider = new TransformProvider();
$result = $transformProvider->transformItem($resource, $transformer);
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:, (*5)
[
'name' => 'Tester',
'email' => 'email@email.com',
'groups' => [
[
'id' => 1,
'name' => 'User'
],
[
'id' => 2,
'name' => 'Manager'
]
]
]
ΠΠΏΡΠΈΠΈ ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ Π² ΡΠ΅Π±Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ΅ΡΡ., (*6)
$transformer = new UserTransformer();
$transformer->add(new UserTransformer()); // ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
$transformer->addCollection(new GroupTransformer($property, $mapping, $options)); // ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
ΠΠ΄Π΅:, (*7)
-
$property - Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π²ΡΠ±ΠΎΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠ°ΠΊ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° (default: null), (*8)
-
$mapping - ΠΠΏΡΠΈΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° (ΡΠΊΠ»Π΅ΠΈΠ²Π°Π½ΠΈΡ Π² Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²)., (*9)
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°:, (*10)
-
field ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ (default: null):, (*11)
- string - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°;
- null - Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ $property ΠΈΠ½Π°ΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΠΌΠ°ΡΠΈΠ²ΠΎΠΌ;
- false - ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΠΌ ΠΌΠ°ΡΠΈΠ²ΠΎΠΌ.
-
required - ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ $property (Π²ΡΠΊΠΈΠ΄ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅) (default: false)., (*12)
-
$options - ΠΠΏΡΠΈΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΡΠΊΡΡΡΠΈΡ
ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Transformer::defaultOptions().
ΠΡΠΈΠΌΠ΅Ρ - Itmedia\DataTransformer\Tests\Stub\Transformer\ArrayGroupTransformer
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
:
$options = [
'root_key' => 'data'
];
$transformProvider = new TransformProvider($options);
ΠΠΏΡΠΈΠΈ:, (*13)
-
root_key - ΠΠ±Π΅ΡΠ½ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΊΠ»ΡΡ root_key. (default: null)
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°:, (*14)
$transformProvider->transformItem($resource, $transformer);
Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:, (*15)
$transformProvider->transformCollection($resource, $transformer);