@ExclusionPolicy(“all”)和@Expose什么都不做

时间:2014-07-16 13:18:01

标签: php symfony fosrestbundle jmsserializerbundle

我不明白为什么注释在我的 GET REST API上什么都不做。 我在所有类的供应商中都有JMS Serializer ..但是当我打电话给我的webservice时,我的所有属性都出现了..然而我做了一个 @ExlusionPolicy(" all") ID属性上强>> @Expose ..

这是我的实体产品:

<?php

namespace GroupeGC\Bundle\ProductBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Jms\Serializer\Annotation as JMS;


/**
 * Product
 *
 * @ORM\Table(name="gc_product")
 * @ORM\Entity
 * @JMS\ExclusionPolicy("all")
 *
 */
class Product
{
 /**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 * @JMS\Type("integer")
 * @JMS\Expose
 */
private $id;


/**
 * @var string
 *
 * @ORM\Column(name="code", type="string", length=255, nullable=false)
 */
private $code;

/**
 * @var string
 *
 * @ORM\Column(name="label", type="string", length=255, nullable=true)
 *
 */
private $label;


/**
 * @var  float
 * @ORM\Column(name="volume", type="float")
 *
 */
private $volume;

 /**
 * @var float
 * @ORM\Column(name="weight", type="float")
 */
private $weight;
 /**
 * Get id
 *
 * @return integer
 */
public function getId()
{

    return $this->id;
}


 /**
* Set code
*
* @param string $code
* @return Product
*/
public function setCode($code)
{
    $this->code = $code;

    return $this;
}

/**
 * Get code
 *
 * @return string
 */
public function getCode()
{
    return $this->code;
}

/**
 * Set label
 *
 * @param string $label
 * @return Product
 */
public function setLabel($label)
{
    $this->label = $label;

    return $this;
}

/**
 * Get label
 *
 * @return string
 */
public function getLabel()
{
    return $this->label;
}


public function getVolume() {
    return $this->volume;
}

public function setVolume($volume) {
    $this->volume = $volume;
    return $this;
}


public function getWeight() {
    return $this->weight;
}

public function setWeight($weight) {
    $this->weight = $weight;
    return $this;
}

但是我们可以看到,正常情况下,我应该拥有应该出现在我的JSON中的id属性,而我拥有所有属性......而且我不明白。

编辑1:这是app / config中的fos_rest配置:

fos_rest:
    view:
        failed_validation:    HTTP_BAD_REQUEST
        default_engine:       php
        formats:
            json:             true
            xml:              true
    format_listener:
        prefer_extension:     true
    body_listener:
        decoders:
            json:             fos_rest.decoder.json
            xml:              fos_rest.decoder.xml
    routing_loader:
        default_format:       json

fos_js_routing:
    routes_to_expose:         [oro_*]

我认为这里没有问题。

1 个答案:

答案 0 :(得分:1)

By default, the serializer will retrieve, or set the value via reflection. here。因此,您实体中的每个属性都将被检索/设置。

/**
 * @JMS\ExclusionPolicy("all")
 * @JMS\AccessType("public_method")
 */

使用AccessType注释时,您告诉序列化程序使用公共方法(例如getX,setX,hasX)来检索/设置值。