过滤SyliusResourceBundle API调用响应的输出

时间:2018-04-17 13:38:05

标签: symfony sylius jmsserializerbundle

我使用SyliusResourceBundle作为独立程序包,通过API公开数据。

当我请求与某些其他实体有关系的实体时,我总是得到包含所有相关实体属性的完整响应。这导致了大量的JSON响应,以及在客户端下载的数据太多。

通常情况下,如果我的实体有这样的$ user属性:

/**
 * @var User
 *
 * @ORM\ManyToOne(targetEntity="User", inversedBy="object")
 */
private $user;

当我请求对象时,我在API响应中获取所有用户的内容:姓名,电子邮件等。

有没有办法只获得我需要的属性/实体列表?喜欢注释或什么?

由于

1 个答案:

答案 0 :(得分:0)

作为记录,SyliusResourceBundle使用JMSSeriliazerBundle,因此这只是资源实体中的排除策略问题。

我只需要排除实体级别的所有字段,而只公开我需要的字段:

namespace AppBundle\Entity;

use JMS\Serializer\Annotation as JMS;
use Sylius\Component\Resource\Model\ResourceInterface;
use Doctrine\ORM\Mapping as ORM;

/**
* 
*  @JMS\ExclusionPolicy("all")
*/
class MyResource implements ResourceInterface
{
    /**
    * @ORM\ManyToOne(targetEntity="User", inversedBy="object")
    */
    private $user;

    /**
    * @ORM\Column(type="string")
    * @JMS\Expose()
    */
    private $name;
}

请参阅文档here