ΠΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ JSON-ΡΡΡΡΠΊΡΡΡ Π΄Π»Ρ Yii2. ΒΆ
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ JSON-Π΄Π°Π½Π½ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Yii2.
- ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² Ρ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² JSON
- ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
- ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈΠ·/Π² JSON
ΠΡΠΈΠΌΠ΅Ρ:
/**
* ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°
*/
class Phone extends dicr\json\JsonEntity
{
/** @var ?int Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° */
public $number;
/**
* {@inheritDoc}
* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² Π² JSON
*/
public function attributesToJson() : array
{
return [
// ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ Π² ΡΠΎΡΠΌΠ°Ρ +X (XXX) XXX-XX-XX ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π² JSON
'number' => function($val) : ?string {
return empty($val) ? null : Formatter::asPhone($val); // null Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² JSON
}
];
}
/**
* {@inheritDoc}
* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈΠ· JSON.
*/
public function attributesFromJson() : array
{
return [
// ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½ Π² int
'number' => function($val) : ?int
{
return empty($val) ? null : (int)$val;
}
];
}
}
/**
* ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
*/
class Customer extends dicr\json\JsonEntity
{
/** @var ?string */
public $fio;
/** @var ?Phone ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½ */
public $cellular;
/** @var Phone[]|null ΡΠ°Π±ΠΎΡΠΈΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠ½Ρ */
public $workPhones;
/**
* {@inheritDoc}
* ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠΉ Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ»Π΅ΠΉ JSON
*/
public function attributeFields() : array
{
return [
'fio' => 'name',
'workPhones' => 'work_phones'
];
}
/**
* {@inheritDoc}
* ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ².
*/
public function attributeEntities() : array
{
return [
'cellular' => Phone::class, // ΠΎΠ΄Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ
'workPhones' => [Phone::class] // ΠΌΠ°ΡΡΠΈΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
];
}
/**
* {@inheritDoc}
* ΠΡΠΈΠΌΠ΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ²
*/
public function rules() : array
{
return [
['cellular', 'default'],
['cellular', EntityValidator::class, 'class' => Phone::class],
// ΠΏΡΠΈΠΌΠ΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
['workPhones', 'default'],
['workPhones', EntityValidator::class, 'class' => [Phone::class]],
];
}
}
ΠΡΠΈΠΌΠ΅Ρ JSON Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ:
{
"name": "ΠΠ²Π°Π½ ΠΠ°ΡΠΈΠ»ΡΠ΅Π²ΠΈΡ", // Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π² fio
"cellular": { // Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ Π² Phone
"number": "+7 (123) 456-78-93" // Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ Π² int
},
"work_phones": [ // Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π² workPhones[2]
{
"number": "" // ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null
},
{
"number": "123-45-67" // Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ Π² (int)1234567
}
]
}
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
// ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΠ· JSON
$customer = new Customer([
'json' => Json::decode($string)
]);
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π² JSON
echo Json::encode($customer->json);
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.