【问题标题】:API PLATFORM custom identifier in custom action自定义操作中的 API PLATFORM 自定义标识符
【发布时间】:2019-11-18 23:21:36
【问题描述】:

我想在自定义操作中使用自定义标识符,而不像这样使用 {id}。

 @ApiResource(
   itemOperations={
     "FORGOT-PASSWORD"={
        "method"="PUT",
        "path"="/users/{forgotPasswordToken}/forgot-password",
        "controller"="App\Controller\ForgotPasswordController",
        "defaults"={"identifiedBy"="forgotPasswordToken"}
        }
    }
  )

但我仍然遇到“无效的标识符值或配置”的错误。

有什么问题吗?

【问题讨论】:

  • 控制器是否添加了use语句?不看代码我无法知道确切的原因。
  • 您好,谢谢您的回复,控制器运行良好,但请求不起作用,因为在自定义操作中,您只能获取具有其 ID 的资源,而不能使用我的 {forgotPasswordToken} 等其他属性案例

标签: rest symfony api-platform.com


【解决方案1】:

这是因为 Api Platform 有一个读取侦听器会尝试检索指向您的项目操作的实体链接。

对于您的自定义操作,您的路径中没有标识符,例如 {id} 来识别您的资源,因此解决方案是使用以下内容停用读取侦听器:

@ApiResource(
   itemOperations={
     "FORGOT-PASSWORD"={
        "method"="PUT",
        "path"="/users/{forgotPasswordToken}/forgot-password",
        "controller"="App\Controller\ForgotPasswordController",
        "defaults"={"identifiedBy"="forgotPasswordToken"},
        "read"=false
        }
    }
  )

【讨论】:

  • 是的,但是使用此解决方案我无法像此类 ForgotPasswordController { public function __invoke(User $user, EntityManagerInterface $entityManager, Request $request) { var_dump($request->get('newPassword'));死; } }
  • 是的,您必须手动检索它如果您的令牌直接保存在您的用户实体中,属性为forgotPasswordToken,您可以将其添加为identifier,但是我不知道你是否可以在同一个资源上拥有多个标识符(从未尝试过)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多