Symfony and API Platform-通过slug或userToken或不同于ID的任何其他字段检索数据

问题描述 投票:3回答:1

我想做的是:

  • 从我的前端向API自定义网址发送请求以激活用户帐户(/ account / activate / someTokenValue)
  • 通过confirmationToken值检索用户表单数据库
  • 激活用户帐户并将其保存到数据库中
  • 返回激活信息(或一些错误,例如令牌无效)

所以我已经定义了:

* @ApiResource(itemOperations={
 *     "get",
 *     "activate_account"={
 *         "method"="get",
 *         "path"="/account/activate/{confirmationToken}",
 *         "controller"=UserActivate::class
 *     }
 * })
 */

在我的User实体类中,有UserActivate控制器和由UserActivateHandler控制器调用的UserActivate。我已将ID的ApiProperty identifier设置为false,并将confirmationToken设置为true

   /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @ApiProperty(identifier=false)
     *
     */
    private $id;

    /**
      * 
      * @ORM\Column(type="string", nullable=true)
      * @ApiProperty(identifier=true)
      */
    protected $confirmationToken;

但是API平台仍然需要ID,并且似乎看不到confirmationToken参数。

基本上我的问题是,在这种情况下,如何通过confirmationToken来检索对象?

php api symfony doctrine api-platform.com
1个回答
0
投票

我也遇到了同样的问题,即通过不同于标识符所指示的属性来获得实体;您在属性注释方面做得很好:

@ApiProperty(identifier=false) 
@ApiProperty(identifier=true)

但是同时您必须在路径中保留{id},所以请更改

"path"="/account/activate/{confirmationToken}",

to

"path"="/account/activate/{id}"
© www.soinside.com 2019 - 2024. All rights reserved.