You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Phabricator中开发可删除事务评论的Delete端点

解答

是否可以开发删除事务评论的Delete端点?

可以实现该功能,Phabricator的扩展开发机制支持自定义接口端点,但需要严格遵循Phabricator的数据关联规则、权限校验逻辑,避免出现数据不一致问题。

原有代码无法运行的原因

你提供的代码是针对PhabricatorFlag(标记)模型的删除逻辑,和事务评论对应的PhabricatorTransactionComment模型的依赖处理逻辑完全不匹配,硬删会跳过权限校验、关联数据更新、操作日志记录等必要步骤,因此无法正常运行。

具体实现步骤

  • 第一步:完成基础校验,先查询到目标评论对象,同时校验当前用户的操作权限,确保用户有权限删除该评论:
    $user = $request->getUser();
    // 从请求参数中获取要删除的评论ID
    $comment_id = $request->getInt('commentID');
    // 按ID查询评论,自动应用基础权限过滤
    $comment = id(new PhabricatorTransactionCommentQuery())
      ->setViewer($user)
      ->withIDs([$comment_id])
      ->executeOne();
    if (!$comment) {
      return new Aphront404Response();
    }
    // 强校验编辑权限,仅评论作者、管理员或对应资源的编辑者可删除评论
    PhabricatorPolicyFilter::requireCapability(
      $user,
      $comment,
      PhabricatorPolicyCapability::CAN_EDIT
    );
    
  • 第二步:调用官方内置的编辑器处理删除逻辑,不要直接调用delete()方法删除评论记录,否则会导致feed流、搜索索引、评论计数等关联数据出现异常:
    $comment->getConfiguredEditor()
      ->setActor($user)
      ->setDeleteComment(true)
      ->setContentSource(PhabricatorContentSource::newFromRequest($request))
      ->applyTransactions($comment->getObject(), []);
    
  • 第三步:构造返回结果,可根据业务需求返回删除成功标识,或返回更新后的评论列表数据即可。

内容的提问来源于stack exchange,提问作者Dicky Arisandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:42:00