例如,在班级
中/**
* @Doctrine\ORM\Mapping\Entity
*/
class Example
{
/**
* @var int The id
*
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\GeneratedValue
* @Doctrine\ORM\Mapping\Column(type="integer")
*/
public $id;
/**
* @var string
*
* @Doctrine\ORM\Mapping\Column(type="string")
*/
public $name;
public function getRandomNumber()
{
return rand();
}
}
当我使用此实体调用json_encode()
时,它不会将getRandomNumber()
值作为类的属性。
我希望它返回:
{
"id": 1,
"name": "foo",
"randomNumber": 123456
}
但它返回:
{
"id": 1,
"name": "foo"
}
答案 0 :(得分:1)
json_encode
将返回一个JSON对象,该对象具有传递给它的对象的公共属性。如果要包含randomNumber
,可以将其设为公共属性,并将其设置为
/**
* @Doctrine\ORM\Mapping\Entity
*/
class Example
{
/**
* @var int The id
*
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\GeneratedValue
* @Doctrine\ORM\Mapping\Column(type="integer")
*/
public $id;
/**
* @var string
*
* @Doctrine\ORM\Mapping\Column(type="string")
*/
public $name;
/**
* @var int
*/
public $randomNumber;
public function __construct() {
$this->randomNumber = $this->getRandomNumber();
}
public function getRandomNumber()
{
return rand();
}
}
对于更复杂的对象序列化,您可能需要查看the symfony serializer
答案 1 :(得分:1)
您可以实现接口\JsonSerializable
来指定应序列化为JSON的数据:
class Example implements \JsonSerializable
{
// ...
public function jsonSerialize()
{
// mixed data which can be serialized by json_encode()
return array(
'id' => $this->id,
'name' => $this->name,
'randomNumber' => $this->getRandomNumber(),
);
}
}
答案 2 :(得分:1)
你应该使用JMSSerializer包! 我在我的所有网站都使用它,这真的是一个很好的解决方案。 https://jmsyst.com/libs/serializer 它使用注释,并创建json序列化实体。它接受实体的属性值,但是使用特定的注释@Accessor,它使用指定的getter来获取其值。 例如:
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Accessor;
/**
* @Expose
* @Accessor("getRandomNumber")
*/
public $randomNumber;
public function getRandomNumber(){
return rand();
}
答案 3 :(得分:1)
使用虚拟财产
信息:https://jmsyst.com/libs/serializer/master/reference/annotations#virtualproperty
/**
* @Doctrine\ORM\Mapping\Entity
*/
class Example
{
/**
* @var int The id
*
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\GeneratedValue
* @Doctrine\ORM\Mapping\Column(type="integer")
*/
public $id;
/**
* @var string
*
* @Doctrine\ORM\Mapping\Column(type="string")
*/
public $name;
/**
* @Serializer\VirtualProperty()
*/
public function getRandomNumber()
{
return rand();
}
}