API平台-提供的值无效(无效的IRI?)。如何通过关系发布信息?

时间:2018-07-21 19:44:09

标签: api-platform.com

我建立了一个非常简单的Group -> GroupUser -> User关系(GroupUser是具有附加数据字段的联接表,Group OneToMany GroupUsers(具有ManyToOne组和User)以及User和OneToMany GroupUser),并且无法发布到API,收到invalid IRI错误。对此似乎有些困惑,我在此找到了几篇文章(herehere),但没有一个明确地解决我最基本的情况(我遵循了API平台文档,并在Symfony4中添加了一个需要api-platform/api-pack安装。

我正在使用IRI关联对象,但是以下POST不起作用(我确实有一个ID为1的用户和ID为1的一个组)并返回了Invalid value provided (invalid IRI?)错误:

curl -X POST "http://api.platform.local/group_users" -H "accept: application/ld+json" -H "Content-Type: application/ld+json" -d "{ \"group\": \"/groups/1\", \"user\": \"/users/1\", \"role\": \"member\"}"

这是我的实体:

应用/实体/组

/**
 * @ORM\OneToMany(targetEntity="GroupUser", mappedBy="group")      
 */
private $users;

应用/实体/用户

/**
 * @ORM\OneToMany(targetEntity="GroupUser", mappedBy="user")
 */
private $groups;

App / Entity / GroupUser

/**
 * @Assert\NotBlank
 * @ORM\JoinColumn(
 *     nullable=false,
 *     onDelete="CASCADE"
 * )
 * @ORM\ManyToOne(
 *    inversedBy="users",
 *    targetEntity="App\Entity\Group"
 * )
 */
private $group;

/**
 * @Assert\NotBlank
 * @ORM\JoinColumn(
 *     nullable=false,
 *     onDelete="CASCADE"
 * )
 * @ORM\ManyToOne(
 *     inversedBy="groups",
 *     targetEntity="App\Entity\User"
 * )
 */
private $user;

我必须缺少一些基本知识,但是文档似乎不需要任何其他内容。这篇文章没有帮助,为此我什至为UserGroup实体添加了一个ID,最初我只有usergroup作为表ID。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了,实际上我犯了两个错误:

  1. 我将值传递给__construct,以在构造时填充GroupUser。我完全删除了__construct,这在API平台和自动IRI创建中效果不佳。

  2. 我为GroupUser表使用了group_id和user_id上的复合主键,我放弃了它,转而使用了自己的ID。

很简单,这就是我添加到GroupUser实体中的内容:

  /**
   * @var int
   *
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue(strategy="AUTO")
   * @ORM\Id
   */
  private $id;  

不要忘记getter方法:

  public function getId(): ?int
  {
    return $this->id;
  }