我有一个具有多个级别的复杂PHP对象。树中的所有对象都实现JsonSerializable接口,因此默认编码可以正常工作。
但是,我想根据登录用户生成不同的输出。对象内部有价格信息,对于简单用户,我想将其隐藏在JSON中,但对于管理员,我希望它存在。
例如:
对于普通用户:
{...{id:1, title: 'product1'}...}
对于管理员:{...{id:1, title: 'product1', price: 100}...}
我正在使用具有强类型的PHP 7.4。
有一种简单的方法吗?
测试数据:
catalog : {
id: 1,
title: 'Catalog A',
locations : [{
id: 100,
type: 'INTERNAL',
boxes: [{
id: 200,
barcode: '1234',
products: [{
id: 500,
title: 'Product1',
price: 100
}, {
id: 501,
title: 'Product2',
price: 170
}]
},{
id: 201,
barcode: '5874',
products: [{
id: 600,
title: 'ProductA',
price: 70
}, {
id: 601,
title: 'ProductB',
price: 75
}]
}]
}]
}
示例PHP类:
class Product implements JsonSerializable {
private ?int $id;
private string $title;
private int $price;
...
public function jsonSerialize() {
return get_object_vars($this);
}
}