ÐÐ¾Ð´ÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ 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.